kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

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 }