The Z80 uses several different methods for determining the correct interrupt vector depending on the hardware implementation. Therefore, SDCC ignores the optional interrupt number and does not attempt to generate an interrupt vector table.
By default, SDCC generates code for a maskable interrupt, which uses an RETI instruction to return from the interrupt. To write an interrupt handler for the non-maskable interrupt, which needs an RETN instruction instead, add the critical keyword:
void nmi_isr (void) critical interrupt
{
...
}