cg_machine_clobber_return.c (649B)
1 /* Keep a return-bound value live across an operation with implicit machine 2 * register effects. In particular, x86-64 div writes rax:rdx even though its 3 * MIR destination need not name either register. Return placement must not 4 * erase the live value's fixed-clobber exclusion. */ 5 6 volatile unsigned long machine_clobber_sink; 7 8 unsigned long keep_across_remainder(unsigned long keep, 9 unsigned long dividend, 10 unsigned long divisor) { 11 machine_clobber_sink = dividend % divisor; 12 return keep; 13 } 14 15 int test_main(void) { 16 return (int)keep_across_remainder(42, 12345, 97); 17 }