boot2

Playing with the boostrap
git clone https://git.ryansepassi.com/git/boot2.git
Log | Files | Refs | README

00204.c (17179B)


      1 // This program is designed to test some arm64-specific things, such as the
      2 // calling convention, but should give the same results on any architecture.
      3 
      4 #include <stdarg.h>
      5 #include <stdint.h>
      6 #include <stdio.h>
      7 
      8 struct s1 { char x[1]; } s1 = { "0" };
      9 struct s2 { char x[2]; } s2 = { "12" };
     10 struct s3 { char x[3]; } s3 = { "345" };
     11 struct s4 { char x[4]; } s4 = { "6789" };
     12 struct s5 { char x[5]; } s5 = { "abcde" };
     13 struct s6 { char x[6]; } s6 = { "fghijk" };
     14 struct s7 { char x[7]; } s7 = { "lmnopqr" };
     15 struct s8 { char x[8]; } s8 = { "stuvwxyz" };
     16 struct s9 { char x[9]; } s9 = { "ABCDEFGHI" };
     17 struct s10 { char x[10]; } s10 = { "JKLMNOPQRS" };
     18 struct s11 { char x[11]; } s11 = { "TUVWXYZ0123" };
     19 struct s12 { char x[12]; } s12 = { "456789abcdef" };
     20 struct s13 { char x[13]; } s13 = { "ghijklmnopqrs" };
     21 struct s14 { char x[14]; } s14 = { "tuvwxyzABCDEFG" };
     22 struct s15 { char x[15]; } s15 = { "HIJKLMNOPQRSTUV" };
     23 struct s16 { char x[16]; } s16 = { "WXYZ0123456789ab" };
     24 struct s17 { char x[17]; } s17 = { "cdefghijklmnopqrs" };
     25 
     26 struct hfa11 { float a; } hfa11 = { 11.1 };
     27 struct hfa12 { float a, b; } hfa12 = { 12.1, 12.2 };
     28 struct hfa13 { float a, b, c; } hfa13 = { 13.1, 13.2, 13.3 };
     29 struct hfa14 { float a, b, c, d; } hfa14 = { 14.1, 14.2, 14.3, 14.4 };
     30 
     31 struct hfa21 { double a; } hfa21 = { 21.1 };
     32 struct hfa22 { double a, b; } hfa22 = { 22.1, 22.2 };
     33 struct hfa23 { double a, b, c; } hfa23 = { 23.1, 23.2, 23.3 };
     34 struct hfa24 { double a, b, c, d; } hfa24 = { 24.1, 24.2, 24.3, 24.4 };
     35 
     36 struct hfa31 { long double a; } hfa31 = { 31.1 };
     37 struct hfa32 { long double a, b; } hfa32 = { 32.1, 32.2 };
     38 struct hfa33 { long double a, b, c; } hfa33 = { 33.1, 33.2, 33.3 };
     39 struct hfa34 { long double a, b, c, d; } hfa34 = { 34.1, 34.2, 34.3, 34.4 };
     40 
     41 void fa_s1(struct s1 a) { printf("%.1s\n", a.x); }
     42 void fa_s2(struct s2 a) { printf("%.2s\n", a.x); }
     43 void fa_s3(struct s3 a) { printf("%.3s\n", a.x); }
     44 void fa_s4(struct s4 a) { printf("%.4s\n", a.x); }
     45 void fa_s5(struct s5 a) { printf("%.5s\n", a.x); }
     46 void fa_s6(struct s6 a) { printf("%.6s\n", a.x); }
     47 void fa_s7(struct s7 a) { printf("%.7s\n", a.x); }
     48 void fa_s8(struct s8 a) { printf("%.8s\n", a.x); }
     49 void fa_s9(struct s9 a) { printf("%.9s\n", a.x); }
     50 void fa_s10(struct s10 a) { printf("%.10s\n", a.x); }
     51 void fa_s11(struct s11 a) { printf("%.11s\n", a.x); }
     52 void fa_s12(struct s12 a) { printf("%.12s\n", a.x); }
     53 void fa_s13(struct s13 a) { printf("%.13s\n", a.x); }
     54 void fa_s14(struct s14 a) { printf("%.14s\n", a.x); }
     55 void fa_s15(struct s15 a) { printf("%.15s\n", a.x); }
     56 void fa_s16(struct s16 a) { printf("%.16s\n", a.x); }
     57 void fa_s17(struct s17 a) { printf("%.17s\n", a.x); }
     58 
     59 void fa_hfa11(struct hfa11 a)
     60 { printf("%.1f\n", a.a); }
     61 void fa_hfa12(struct hfa12 a)
     62 { printf("%.1f %.1f\n", a.a, a.a); }
     63 void fa_hfa13(struct hfa13 a)
     64 { printf("%.1f %.1f %.1f\n", a.a, a.b, a.c); }
     65 void fa_hfa14(struct hfa14 a)
     66 { printf("%.1f %.1f %.1f %.1f\n", a.a, a.b, a.c, a.d); }
     67 
     68 void fa_hfa21(struct hfa21 a)
     69 { printf("%.1f\n", a.a); }
     70 void fa_hfa22(struct hfa22 a)
     71 { printf("%.1f %.1f\n", a.a, a.a); }
     72 void fa_hfa23(struct hfa23 a)
     73 { printf("%.1f %.1f %.1f\n", a.a, a.b, a.c); }
     74 void fa_hfa24(struct hfa24 a)
     75 { printf("%.1f %.1f %.1f %.1f\n", a.a, a.b, a.c, a.d); }
     76 
     77 void fa_hfa31(struct hfa31 a)
     78 { printf("%.1Lf\n", a.a); }
     79 void fa_hfa32(struct hfa32 a)
     80 { printf("%.1Lf %.1Lf\n", a.a, a.a); }
     81 void fa_hfa33(struct hfa33 a)
     82 { printf("%.1Lf %.1Lf %.1Lf\n", a.a, a.b, a.c); }
     83 void fa_hfa34(struct hfa34 a)
     84 { printf("%.1Lf %.1Lf %.1Lf %.1Lf\n", a.a, a.b, a.c, a.d); }
     85 
     86 void fa1(struct s8 a, struct s9 b, struct s10 c, struct s11 d,
     87          struct s12 e, struct s13 f)
     88 {
     89     printf("%.3s %.3s %.3s %.3s %.3s %.3s\n", a.x, b.x, c.x, d.x, e.x, f.x);
     90 }
     91 
     92 void fa2(struct s9 a, struct s10 b, struct s11 c, struct s12 d,
     93          struct s13 e, struct s14 f)
     94 {
     95     printf("%.3s %.3s %.3s %.3s %.3s %.3s\n", a.x, b.x, c.x, d.x, e.x, f.x);
     96 }
     97 
     98 void fa3(struct hfa14 a, struct hfa23 b, struct hfa32 c)
     99 {
    100     printf("%.1f %.1f %.1f %.1f %.1Lf %.1Lf\n",
    101            a.a, a.d, b.a, b.c, c.a, c.b);
    102 }
    103 
    104 void fa4(struct s1 a, struct hfa14 b, struct s2 c, struct hfa24 d,
    105          struct s3 e, struct hfa34 f)
    106 {
    107     printf("%.1s %.1f %.1f %.2s %.1f %.1f %.3s %.1Lf %.1Lf\n",
    108            a.x, b.a, b.d, c.x, d.a, d.d, e.x, f.a, f.d);
    109 }
    110 
    111 void arg(void)
    112 {
    113     printf("Arguments:\n");
    114     fa_s1(s1);
    115     fa_s2(s2);
    116     fa_s3(s3);
    117     fa_s4(s4);
    118     fa_s5(s5);
    119     fa_s6(s6);
    120     fa_s7(s7);
    121     fa_s8(s8);
    122     fa_s9(s9);
    123     fa_s10(s10);
    124     fa_s11(s11);
    125     fa_s12(s12);
    126     fa_s13(s13);
    127     fa_s14(s14);
    128     fa_s15(s15);
    129     fa_s16(s16);
    130     fa_s17(s17);
    131     fa_hfa11(hfa11);
    132     fa_hfa12(hfa12);
    133     fa_hfa13(hfa13);
    134     fa_hfa14(hfa14);
    135     fa_hfa21(hfa21);
    136     fa_hfa22(hfa22);
    137     fa_hfa23(hfa23);
    138     fa_hfa24(hfa24);
    139     fa_hfa31(hfa31);
    140     fa_hfa32(hfa32);
    141     fa_hfa33(hfa33);
    142     fa_hfa34(hfa34);
    143     fa1(s8, s9, s10, s11, s12, s13);
    144     fa2(s9, s10, s11, s12, s13, s14);
    145     fa3(hfa14, hfa23, hfa32);
    146     fa4(s1, hfa14, s2, hfa24, s3, hfa34);
    147 }
    148 
    149 struct s1 fr_s1(void) { return s1; }
    150 struct s2 fr_s2(void) { return s2; }
    151 struct s3 fr_s3(void) { return s3; }
    152 struct s4 fr_s4(void) { return s4; }
    153 struct s5 fr_s5(void) { return s5; }
    154 struct s6 fr_s6(void) { return s6; }
    155 struct s7 fr_s7(void) { return s7; }
    156 struct s8 fr_s8(void) { return s8; }
    157 struct s9 fr_s9(void) { return s9; }
    158 struct s10 fr_s10(void) { return s10; }
    159 struct s11 fr_s11(void) { return s11; }
    160 struct s12 fr_s12(void) { return s12; }
    161 struct s13 fr_s13(void) { return s13; }
    162 struct s14 fr_s14(void) { return s14; }
    163 struct s15 fr_s15(void) { return s15; }
    164 struct s16 fr_s16(void) { return s16; }
    165 struct s17 fr_s17(void) { return s17; }
    166 
    167 struct hfa11 fr_hfa11(void) { return hfa11; }
    168 struct hfa12 fr_hfa12(void) { return hfa12; }
    169 struct hfa13 fr_hfa13(void) { return hfa13; }
    170 struct hfa14 fr_hfa14(void) { return hfa14; }
    171 
    172 struct hfa21 fr_hfa21(void) { return hfa21; }
    173 struct hfa22 fr_hfa22(void) { return hfa22; }
    174 struct hfa23 fr_hfa23(void) { return hfa23; }
    175 struct hfa24 fr_hfa24(void) { return hfa24; }
    176 
    177 struct hfa31 fr_hfa31(void) { return hfa31; }
    178 struct hfa32 fr_hfa32(void) { return hfa32; }
    179 struct hfa33 fr_hfa33(void) { return hfa33; }
    180 struct hfa34 fr_hfa34(void) { return hfa34; }
    181 
    182 void ret(void)
    183 {
    184     struct s1 t1 = fr_s1();
    185     struct s2 t2 = fr_s2();
    186     struct s3 t3 = fr_s3();
    187     struct s4 t4 = fr_s4();
    188     struct s5 t5 = fr_s5();
    189     struct s6 t6 = fr_s6();
    190     struct s7 t7 = fr_s7();
    191     struct s8 t8 = fr_s8();
    192     struct s9 t9 = fr_s9();
    193     struct s10 t10 = fr_s10();
    194     struct s11 t11 = fr_s11();
    195     struct s12 t12 = fr_s12();
    196     struct s13 t13 = fr_s13();
    197     struct s14 t14 = fr_s14();
    198     struct s15 t15 = fr_s15();
    199     struct s16 t16 = fr_s16();
    200     struct s17 t17 = fr_s17();
    201     printf("Return values:\n");
    202     printf("%.1s\n", t1.x);
    203     printf("%.2s\n", t2.x);
    204     printf("%.3s\n", t3.x);
    205     printf("%.4s\n", t4.x);
    206     printf("%.5s\n", t5.x);
    207     printf("%.6s\n", t6.x);
    208     printf("%.7s\n", t7.x);
    209     printf("%.8s\n", t8.x);
    210     printf("%.9s\n", t9.x);
    211     printf("%.10s\n", t10.x);
    212     printf("%.11s\n", t11.x);
    213     printf("%.12s\n", t12.x);
    214     printf("%.13s\n", t13.x);
    215     printf("%.14s\n", t14.x);
    216     printf("%.15s\n", t15.x);
    217     printf("%.16s\n", t16.x);
    218     printf("%.17s\n", t17.x);
    219     printf("%.1f\n", fr_hfa11().a);
    220     printf("%.1f %.1f\n", fr_hfa12().a, fr_hfa12().b);
    221     printf("%.1f %.1f\n", fr_hfa13().a, fr_hfa13().c);
    222     printf("%.1f %.1f\n", fr_hfa14().a, fr_hfa14().d);
    223     printf("%.1f\n", fr_hfa21().a);
    224     printf("%.1f %.1f\n", fr_hfa22().a, fr_hfa22().b);
    225     printf("%.1f %.1f\n", fr_hfa23().a, fr_hfa23().c);
    226     printf("%.1f %.1f\n", fr_hfa24().a, fr_hfa24().d);
    227     printf("%.1Lf\n", fr_hfa31().a);
    228     printf("%.1Lf %.1Lf\n", fr_hfa32().a, fr_hfa32().b);
    229     printf("%.1Lf %.1Lf\n", fr_hfa33().a, fr_hfa33().c);
    230     printf("%.1Lf %.1Lf\n", fr_hfa34().a, fr_hfa34().d);
    231 }
    232 
    233 int match(const char **s, const char *f)
    234 {
    235     const char *p = *s;
    236     for (p = *s; *f && *f == *p; f++, p++)
    237         ;
    238     if (!*f) {
    239         *s = p - 1;
    240         return 1;
    241     }
    242     return 0;
    243 }
    244 
    245 void myprintf(const char *format, ...)
    246 {
    247     const char *s;
    248     va_list ap;
    249     va_start(ap, format);
    250     for (s = format; *s; s++) {
    251         if (match(&s, "%7s")) {
    252             struct s7 t7 = va_arg(ap, struct s7);
    253             printf("%.7s", t7.x);
    254         }
    255         else if (match(&s, "%9s")) {
    256             struct s9 t9 = va_arg(ap, struct s9);
    257             printf("%.9s", t9.x);
    258         }
    259         else if (match(&s, "%hfa11")) {
    260             struct hfa11 x = va_arg(ap, struct hfa11);
    261             printf("%.1f,%.1f", x.a, x.a);
    262         }
    263         else if (match(&s, "%hfa12")) {
    264             struct hfa12 x = va_arg(ap, struct hfa12);
    265             printf("%.1f,%.1f", x.a, x.b);
    266         }
    267         else if (match(&s, "%hfa13")) {
    268             struct hfa13 x = va_arg(ap, struct hfa13);
    269             printf("%.1f,%.1f", x.a, x.c);
    270         }
    271         else if (match(&s, "%hfa14")) {
    272             struct hfa14 x = va_arg(ap, struct hfa14);
    273             printf("%.1f,%.1f", x.a, x.d);
    274         }
    275         else if (match(&s, "%hfa21")) {
    276             struct hfa21 x = va_arg(ap, struct hfa21);
    277             printf("%.1f,%.1f", x.a, x.a);
    278         }
    279         else if (match(&s, "%hfa22")) {
    280             struct hfa22 x = va_arg(ap, struct hfa22);
    281             printf("%.1f,%.1f", x.a, x.b);
    282         }
    283         else if (match(&s, "%hfa23")) {
    284             struct hfa23 x = va_arg(ap, struct hfa23);
    285             printf("%.1f,%.1f", x.a, x.c);
    286         }
    287         else if (match(&s, "%hfa24")) {
    288             struct hfa24 x = va_arg(ap, struct hfa24);
    289             printf("%.1f,%.1f", x.a, x.d);
    290         }
    291         else if (match(&s, "%hfa31")) {
    292             struct hfa31 x = va_arg(ap, struct hfa31);
    293             printf("%.1Lf,%.1Lf", x.a, x.a);
    294         }
    295         else if (match(&s, "%hfa32")) {
    296             struct hfa32 x = va_arg(ap, struct hfa32);
    297             printf("%.1Lf,%.1Lf", x.a, x.b);
    298         }
    299         else if (match(&s, "%hfa33")) {
    300             struct hfa33 x = va_arg(ap, struct hfa33);
    301             printf("%.1Lf,%.1Lf", x.a, x.c);
    302         }
    303         else if (match(&s, "%hfa34")) {
    304             struct hfa34 x = va_arg(ap, struct hfa34);
    305             printf("%.1Lf,%.1Lf", x.a, x.d);
    306         }
    307         else
    308             putchar(*s);
    309     }
    310     putchar('\n');
    311 }
    312 
    313 void stdarg(void)
    314 {
    315     printf("stdarg:\n");
    316     myprintf("%9s %9s %9s %9s %9s %9s", s9, s9, s9, s9, s9, s9);
    317     myprintf("%7s %9s %9s %9s %9s %9s", s7, s9, s9, s9, s9, s9);
    318 
    319     myprintf("HFA long double:");
    320     myprintf("%hfa34 %hfa34 %hfa34 %hfa34", hfa34, hfa34, hfa34, hfa34);
    321     myprintf("%hfa33 %hfa34 %hfa34 %hfa34", hfa33, hfa34, hfa34, hfa34);
    322     myprintf("%hfa32 %hfa34 %hfa34 %hfa34", hfa32, hfa34, hfa34, hfa34);
    323     myprintf("%hfa31 %hfa34 %hfa34 %hfa34", hfa31, hfa34, hfa34, hfa34);
    324 
    325     myprintf("%hfa32 %hfa33 %hfa33 %hfa33 %hfa33",
    326              hfa32, hfa33, hfa33, hfa33, hfa33);
    327     myprintf("%hfa31 %hfa33 %hfa33 %hfa33 %hfa33",
    328              hfa31, hfa33, hfa33, hfa33, hfa33);
    329     myprintf("%hfa33 %hfa33 %hfa33 %hfa33",
    330              hfa33, hfa33, hfa33, hfa33);
    331 
    332     myprintf("%hfa34 %hfa32 %hfa32 %hfa32 %hfa32",
    333              hfa34, hfa32, hfa32, hfa32, hfa32);
    334     myprintf("%hfa33 %hfa32 %hfa32 %hfa32 %hfa32",
    335              hfa33, hfa32, hfa32, hfa32, hfa32);
    336 
    337     myprintf("%hfa34 %hfa32 %hfa31 %hfa31 %hfa31 %hfa31",
    338              hfa34, hfa32, hfa31, hfa31, hfa31, hfa31);
    339 
    340     myprintf("HFA double:");
    341     myprintf("%hfa24 %hfa24 %hfa24 %hfa24", hfa24, hfa24, hfa24, hfa24);
    342     myprintf("%hfa23 %hfa24 %hfa24 %hfa24", hfa23, hfa24, hfa24, hfa24);
    343     myprintf("%hfa22 %hfa24 %hfa24 %hfa24", hfa22, hfa24, hfa24, hfa24);
    344     myprintf("%hfa21 %hfa24 %hfa24 %hfa24", hfa21, hfa24, hfa24, hfa24);
    345 
    346     myprintf("%hfa22 %hfa23 %hfa23 %hfa23 %hfa23",
    347              hfa22, hfa23, hfa23, hfa23, hfa23);
    348     myprintf("%hfa21 %hfa23 %hfa23 %hfa23 %hfa23",
    349              hfa21, hfa23, hfa23, hfa23, hfa23);
    350     myprintf("%hfa23 %hfa23 %hfa23 %hfa23",
    351              hfa23, hfa23, hfa23, hfa23);
    352 
    353     myprintf("%hfa24 %hfa22 %hfa22 %hfa22 %hfa22",
    354              hfa24, hfa22, hfa22, hfa22, hfa22);
    355     myprintf("%hfa23 %hfa22 %hfa22 %hfa22 %hfa22",
    356              hfa23, hfa22, hfa22, hfa22, hfa22);
    357 
    358     myprintf("%hfa24 %hfa22 %hfa21 %hfa21 %hfa21 %hfa21",
    359              hfa24, hfa22, hfa21, hfa21, hfa21, hfa21);
    360 
    361     myprintf("HFA float:");
    362     myprintf("%hfa14 %hfa14 %hfa14 %hfa14", hfa14, hfa14, hfa14, hfa14);
    363     myprintf("%hfa13 %hfa14 %hfa14 %hfa14", hfa13, hfa14, hfa14, hfa14);
    364     myprintf("%hfa12 %hfa14 %hfa14 %hfa14", hfa12, hfa14, hfa14, hfa14);
    365     myprintf("%hfa11 %hfa14 %hfa14 %hfa14", hfa11, hfa14, hfa14, hfa14);
    366 
    367     myprintf("%hfa12 %hfa13 %hfa13 %hfa13 %hfa13",
    368              hfa12, hfa13, hfa13, hfa13, hfa13);
    369     myprintf("%hfa11 %hfa13 %hfa13 %hfa13 %hfa13",
    370              hfa11, hfa13, hfa13, hfa13, hfa13);
    371     myprintf("%hfa13 %hfa13 %hfa13 %hfa13",
    372              hfa13, hfa13, hfa13, hfa13);
    373 
    374     myprintf("%hfa14 %hfa12 %hfa12 %hfa12 %hfa12",
    375              hfa14, hfa12, hfa12, hfa12, hfa12);
    376     myprintf("%hfa13 %hfa12 %hfa12 %hfa12 %hfa12",
    377              hfa13, hfa12, hfa12, hfa12, hfa12);
    378 
    379     myprintf("%hfa14 %hfa12 %hfa11 %hfa11 %hfa11 %hfa11",
    380              hfa14, hfa12, hfa11, hfa11, hfa11, hfa11);
    381 }
    382 
    383 void pll(unsigned long long x)
    384 {
    385     printf("%llx\n", x);
    386 }
    387 
    388 void movi(void)
    389 {
    390     printf("MOVI:\n");
    391     pll(0);
    392     pll(0xabcd);
    393     pll(0xabcd0000);
    394     pll(0xabcd00000000);
    395     pll(0xabcd000000000000);
    396     pll(0xffffabcd);
    397     pll(0xabcdffff);
    398     pll(0xffffffffffffabcd);
    399     pll(0xffffffffabcdffff);
    400     pll(0xffffabcdffffffff);
    401     pll(0xabcdffffffffffff);
    402     pll(0xaaaaaaaa);
    403     pll(0x5555555555555555);
    404     pll(0x77777777);
    405     pll(0x3333333333333333);
    406     pll(0xf8f8f8f8);
    407     pll(0x1e1e1e1e1e1e1e1e);
    408     pll(0x3f803f80);
    409     pll(0x01ff01ff01ff01ff);
    410     pll(0x007fffc0);
    411     pll(0x03fff80003fff800);
    412     pll(0x0007fffffffffe00);
    413 
    414     pll(0xabcd1234);
    415     pll(0xabcd00001234);
    416     pll(0xabcd000000001234);
    417     pll(0xabcd12340000);
    418     pll(0xabcd000012340000);
    419     pll(0xabcd123400000000);
    420     pll(0xffffffffabcd1234);
    421     pll(0xffffabcdffff1234);
    422     pll(0xabcdffffffff1234);
    423     pll(0xffffabcd1234ffff);
    424     pll(0xabcdffff1234ffff);
    425     pll(0xabcd1234ffffffff);
    426 
    427     pll(0xffffef0123456789);
    428     pll(0xabcdef012345ffff);
    429 
    430     pll(0xabcdef0123456789);
    431 }
    432 
    433 static uint32_t addip0(uint32_t x) { return x + 0; }
    434 static uint64_t sublp0(uint64_t x) { return x - 0; }
    435 static uint32_t addip123(uint32_t x) { return x + 123; }
    436 static uint64_t addlm123(uint64_t x) { return x + -123; }
    437 static uint64_t sublp4095(uint64_t x) { return x - 4095; }
    438 static uint32_t subim503808(uint32_t x) { return x - -503808; }
    439 static uint64_t addp12345(uint64_t x) { return x + 12345; }
    440 static uint32_t subp12345(uint32_t x) { return x - 12345; }
    441 
    442 static uint32_t mvni(uint32_t x) { return 0xffffffff - x; }
    443 static uint64_t negl(uint64_t x) { return 0 - x; }
    444 static uint32_t rsbi123(uint32_t x) { return 123 - x; }
    445 static uint64_t rsbl123(uint64_t x) { return 123 - x; }
    446 
    447 static uint32_t andi0(uint32_t x) { return x & 0; }
    448 static uint64_t andlm1(uint64_t x) { return x & -1; }
    449 static uint64_t orrl0(uint64_t x) { return x | 0; }
    450 static uint32_t orrim1(uint32_t x) { return x | -1; }
    451 static uint32_t eori0(uint32_t x) { return x ^ 0; }
    452 static uint64_t eorlm1(uint64_t x) { return x ^ -1; }
    453 static uint32_t and0xf0(uint32_t x) { return x & 0xf0; }
    454 static uint64_t orr0xf0(uint64_t x) { return x | 0xf0; }
    455 static uint64_t eor0xf0(uint64_t x) { return x ^ 0xf0; }
    456 
    457 static uint32_t lsli0(uint32_t x) { return x << 0; }
    458 static uint32_t lsri0(uint32_t x) { return x >> 0; }
    459 static int64_t asrl0(int64_t x) { return x >> 0; }
    460 static uint32_t lsli1(uint32_t x) { return x << 1; }
    461 static uint32_t lsli31(uint32_t x) { return x << 31; }
    462 static uint64_t lsll1(uint64_t x) { return x << 1; }
    463 static uint64_t lsll63(uint64_t x) { return x << 63; }
    464 static uint32_t lsri1(uint32_t x) { return x >> 1; }
    465 static uint32_t lsri31(uint32_t x) { return x >> 31; }
    466 static uint64_t lsrl1(uint64_t x) { return x >> 1; }
    467 static uint64_t lsrl63(uint64_t x) { return x >> 63; }
    468 static int32_t asri1(int32_t x) { return x >> 1; }
    469 static int32_t asri31(int32_t x) { return x >> 31; }
    470 static int64_t asrl1(int64_t x) { return x >> 1; }
    471 static int64_t asrl63(int64_t x) { return x >> 63; }
    472 
    473 void opi(void)
    474 {
    475     int x = 1000;
    476     pll(addip0(x));
    477     pll(sublp0(x));
    478     pll(addip123(x));
    479     pll(addlm123(x));
    480     pll(sublp4095(x));
    481     pll(subim503808(x));
    482     pll(addp12345(x));
    483     pll(subp12345(x));
    484     pll(mvni(x));
    485     pll(negl(x));
    486     pll(rsbi123(x));
    487     pll(rsbl123(x));
    488     pll(andi0(x));
    489     pll(andlm1(x));
    490     pll(orrl0(x));
    491     pll(orrim1(x));
    492     pll(eori0(x));
    493     pll(eorlm1(x));
    494     pll(and0xf0(x));
    495     pll(orr0xf0(x));
    496     pll(eor0xf0(x));
    497     pll(lsli0(x));
    498     pll(lsri0(x));
    499     pll(asrl0(x));
    500     pll(lsli1(x));
    501     pll(lsli31(x));
    502     pll(lsll1(x));
    503     pll(lsll63(x));
    504     pll(lsri1(x));
    505     pll(lsri31(x));
    506     pll(lsrl1(x));
    507     pll(lsrl63(x));
    508     pll(asri1(x));
    509     pll(asri31(x));
    510     pll(asrl1(x));
    511     pll(asrl63(x));
    512 }
    513 
    514 void pcs(void)
    515 {
    516     arg();
    517     ret();
    518     stdarg();
    519     movi();
    520     opi();
    521 }
    522 
    523 int main()
    524 {
    525     pcs();
    526     return 0;
    527 }