I am currently using following for trap instruction: (define_insn "trap" [(trap_if (const_int 1) (const_int 0))] "" "brk") However it causes the compiler to generate a trap when address 0 is used; in the example below, I have a function that prints characters through the UART using address 0; but the resulting assembly generates a function that traps instead. #define UART_ADDR 0 void uart_print (char *s) { while (*s) { *(volatile char *)UART_ADDR = *s; ++s; } } How can one implement unconditional trap ?