kit

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

conv_long_double_s.c (754B)


      1 /* Signed long <-> double round-trip: SCVTF (long->double) and FCVTZS
      2  * (double->long), using the 64-bit GPR forms. A value above 2^32 forces the
      3  * 64-bit register variant. volatile operands defeat folding.
      4  *
      5  *   L = 0x2_0000_0000 = 8589934592 : d = (double)L      (scvtf d,x)
      6  *   back: (long)(d / 0x2_0000_0000) = 1                 (fcvtzs x,d) */
      7 int test_main(void) {
      8   volatile long L = 0x200000000L; /* 8589934592 */
      9   volatile long M = -84L;
     10   double d = (double)L;               /* scvtf d,x */
     11   double e = (double)M;               /* scvtf d,x (negative) */
     12   long b1 = (long)(d / 8589934592.0); /* 1,   fcvtzs x,d */
     13   long b2 = (long)(e / 2.0);          /* -42, fcvtzs x,d */
     14   return (int)(-b2 + b1 - 1);         /* 42 + 1 - 1 = 42 */
     15 }