mes/scaffold/tinycc/73_arm64.c

528 lines
17 KiB
C
Raw Normal View History

mescc: Import tinycc test suite. * make.scm (check-scaffold-tinycc): New target. * guile/guix/make.scm (<target>): Add baseline field. (method-check): Handle baseline. * scaffold/tinycc/00_assignment.c: New file. * scaffold/tinycc/00_assignment.expect: New file. * scaffold/tinycc/01_comment.c: New file. * scaffold/tinycc/01_comment.expect: New file. * scaffold/tinycc/02_printf.c: New file. * scaffold/tinycc/02_printf.expect: New file. * scaffold/tinycc/03_struct.c: New file. * scaffold/tinycc/03_struct.expect: New file. * scaffold/tinycc/04_for.c: New file. * scaffold/tinycc/04_for.expect: New file. * scaffold/tinycc/05_array.c: New file. * scaffold/tinycc/05_array.expect: New file. * scaffold/tinycc/06_case.c: New file. * scaffold/tinycc/06_case.expect: New file. * scaffold/tinycc/07_function.c: New file. * scaffold/tinycc/07_function.expect: New file. * scaffold/tinycc/08_while.c: New file. * scaffold/tinycc/08_while.expect: New file. * scaffold/tinycc/09_do_while.c: New file. * scaffold/tinycc/09_do_while.expect: New file. * scaffold/tinycc/10_pointer.c: New file. * scaffold/tinycc/10_pointer.expect: New file. * scaffold/tinycc/11_precedence.c: New file. * scaffold/tinycc/11_precedence.expect: New file. * scaffold/tinycc/12_hashdefine.c: New file. * scaffold/tinycc/12_hashdefine.expect: New file. * scaffold/tinycc/13_integer_literals.c: New file. * scaffold/tinycc/13_integer_literals.expect: New file. * scaffold/tinycc/14_if.c: New file. * scaffold/tinycc/14_if.expect: New file. * scaffold/tinycc/15_recursion.c: New file. * scaffold/tinycc/15_recursion.expect: New file. * scaffold/tinycc/16_nesting.c: New file. * scaffold/tinycc/16_nesting.expect: New file. * scaffold/tinycc/17_enum.c: New file. * scaffold/tinycc/17_enum.expect: New file. * scaffold/tinycc/18_include.h: New file. * scaffold/tinycc/18_include.c: New file. * scaffold/tinycc/18_include.expect: New file. * scaffold/tinycc/19_pointer_arithmetic.c: New file. * scaffold/tinycc/19_pointer_arithmetic.expect: New file. * scaffold/tinycc/20_pointer_comparison.c: New file. * scaffold/tinycc/20_pointer_comparison.expect: New file. * scaffold/tinycc/21_char_array.c: New file. * scaffold/tinycc/21_char_array.expect: New file. * scaffold/tinycc/22_floating_point.c: New file. * scaffold/tinycc/22_floating_point.expect: New file. * scaffold/tinycc/23_type_coercion.c: New file. * scaffold/tinycc/23_type_coercion.expect: New file. * scaffold/tinycc/24_math_library.c: New file. * scaffold/tinycc/24_math_library.expect: New file. * scaffold/tinycc/25_quicksort.c: New file. * scaffold/tinycc/25_quicksort.expect: New file. * scaffold/tinycc/26_character_constants.c: New file. * scaffold/tinycc/26_character_constants.expect: New file. * scaffold/tinycc/27_sizeof.c: New file. * scaffold/tinycc/27_sizeof.expect: New file. * scaffold/tinycc/28_strings.c: New file. * scaffold/tinycc/28_strings.expect: New file. * scaffold/tinycc/29_array_address.c: New file. * scaffold/tinycc/29_array_address.expect: New file. * scaffold/tinycc/30_hanoi.c: New file. * scaffold/tinycc/30_hanoi.expect: New file. * scaffold/tinycc/31_args.c: New file. * scaffold/tinycc/31_args.expect: New file. * scaffold/tinycc/32_led.c: New file. * scaffold/tinycc/32_led.expect: New file. * scaffold/tinycc/33_ternary_op.c: New file. * scaffold/tinycc/33_ternary_op.expect: New file. * scaffold/tinycc/34_array_assignment.c: New file. * scaffold/tinycc/34_array_assignment.expect: New file. * scaffold/tinycc/35_sizeof.c: New file. * scaffold/tinycc/35_sizeof.expect: New file. * scaffold/tinycc/36_array_initialisers.c: New file. * scaffold/tinycc/36_array_initialisers.expect: New file. * scaffold/tinycc/37_sprintf.c: New file. * scaffold/tinycc/37_sprintf.expect: New file. * scaffold/tinycc/38_multiple_array_index.c: New file. * scaffold/tinycc/38_multiple_array_index.expect: New file. * scaffold/tinycc/39_typedef.c: New file. * scaffold/tinycc/39_typedef.expect: New file. * scaffold/tinycc/40_stdio.c: New file. * scaffold/tinycc/40_stdio.expect: New file. * scaffold/tinycc/41_hashif.c: New file. * scaffold/tinycc/41_hashif.expect: New file. * scaffold/tinycc/42_function_pointer.c: New file. * scaffold/tinycc/42_function_pointer.expect: New file. * scaffold/tinycc/43_void_param.c: New file. * scaffold/tinycc/43_void_param.expect: New file. * scaffold/tinycc/44_scoped_declarations.c: New file. * scaffold/tinycc/44_scoped_declarations.expect: New file. * scaffold/tinycc/45_empty_for.c: New file. * scaffold/tinycc/45_empty_for.expect: New file. * scaffold/tinycc/46_grep.c: New file. * scaffold/tinycc/46_grep.expect: New file. * scaffold/tinycc/47_switch_return.c: New file. * scaffold/tinycc/47_switch_return.expect: New file. * scaffold/tinycc/48_nested_break.c: New file. * scaffold/tinycc/48_nested_break.expect: New file. * scaffold/tinycc/49_bracket_evaluation.c: New file. * scaffold/tinycc/49_bracket_evaluation.expect: New file. * scaffold/tinycc/50_logical_second_arg.c: New file. * scaffold/tinycc/50_logical_second_arg.expect: New file. * scaffold/tinycc/51_static.c: New file. * scaffold/tinycc/51_static.expect: New file. * scaffold/tinycc/52_unnamed_enum.c: New file. * scaffold/tinycc/52_unnamed_enum.expect: New file. * scaffold/tinycc/54_goto.c: New file. * scaffold/tinycc/54_goto.expect: New file. * scaffold/tinycc/55_lshift_type.c: New file. * scaffold/tinycc/55_lshift_type.expect: New file. * scaffold/tinycc/56_btype_excess-1.c: New file. * scaffold/tinycc/56_btype_excess-1.expect: New file. * scaffold/tinycc/57_btype_excess-2.c: New file. * scaffold/tinycc/57_btype_excess-2.expect: New file. * scaffold/tinycc/58_function_redefinition.c: New file. * scaffold/tinycc/58_function_redefinition.expect: New file. * scaffold/tinycc/59_function_array.c: New file. * scaffold/tinycc/59_function_array.expect: New file. * scaffold/tinycc/60_enum_redefinition.c: New file. * scaffold/tinycc/60_enum_redefinition.expect: New file. * scaffold/tinycc/61_undefined_enum.c: New file. * scaffold/tinycc/61_undefined_enum.expect: New file. * scaffold/tinycc/62_enumerator_redefinition.c: New file. * scaffold/tinycc/62_enumerator_redefinition.expect: New file. * scaffold/tinycc/63_local_enumerator_redefinition.c: New file. * scaffold/tinycc/63_local_enumerator_redefinition.expect: New file. * scaffold/tinycc/64_macro_nesting.c: New file. * scaffold/tinycc/64_macro_nesting.expect: New file. * scaffold/tinycc/67_macro_concat.c: New file. * scaffold/tinycc/67_macro_concat.expect: New file. * scaffold/tinycc/70_floating_point_literals.c: New file. * scaffold/tinycc/70_floating_point_literals.expect: New file. * scaffold/tinycc/71_macro_empty_arg.c: New file. * scaffold/tinycc/71_macro_empty_arg.expect: New file. * scaffold/tinycc/72_long_long_constant.c: New file. * scaffold/tinycc/72_long_long_constant.expect: New file. * scaffold/tinycc/73_arm64.c: New file. * scaffold/tinycc/73_arm64.expect: New file. * scaffold/tinycc/74_nocode_wanted.c: New file. * scaffold/tinycc/74_nocode_wanted.expect: New file. * scaffold/tinycc/75_array_in_struct_init.c: New file. * scaffold/tinycc/75_array_in_struct_init.expect: New file. * scaffold/tinycc/76_dollars_in_identifiers.c: New file. * scaffold/tinycc/76_dollars_in_identifiers.expect: New file. * scaffold/tinycc/77_push_pop_macro.c: New file. * scaffold/tinycc/77_push_pop_macro.expect: New file. * scaffold/tinycc/78_vla_label.c: New file. * scaffold/tinycc/78_vla_label.expect: New file. * scaffold/tinycc/79_vla_continue.c: New file. * scaffold/tinycc/79_vla_continue.expect: New file. * scaffold/tinycc/80_flexarray.c: New file. * scaffold/tinycc/80_flexarray.expect: New file. * scaffold/tinycc/81_types.c: New file. * scaffold/tinycc/81_types.expect: New file. * scaffold/tinycc/82_attribs_position.c: New file. * scaffold/tinycc/82_attribs_position.expect: New file. * scaffold/tinycc/83_utf8_in_identifiers.c: New file. * scaffold/tinycc/83_utf8_in_identifiers.expect: New file. * scaffold/tinycc/84_hex-float.c: New file. * scaffold/tinycc/84_hex-float.expect: New file. * scaffold/tinycc/85_asm-outside-function.c: New file. * scaffold/tinycc/85_asm-outside-function.expect: New file. * scaffold/tinycc/86_memory-model.c: New file. * scaffold/tinycc/86_memory-model.expect: New file. * scaffold/tinycc/87_dead_code.c: New file. * scaffold/tinycc/87_dead_code.expect: New file. * scaffold/tinycc/88_codeopt.c: New file. * scaffold/tinycc/88_codeopt.expect: New file. * scaffold/tinycc/89_nocode_wanted.c: New file. * scaffold/tinycc/89_nocode_wanted.expect: New file. * scaffold/tinycc/90_struct-init.c: New file. * scaffold/tinycc/90_struct-init.expect: New file. * scaffold/tinycc/91_ptr_longlong_arith32.c: New file. * scaffold/tinycc/91_ptr_longlong_arith32.expect: New file. * scaffold/tinycc/92_enum_bitfield.c: New file. * scaffold/tinycc/92_enum_bitfield.expect: New file. * scaffold/tinycc/93_integer_promotion.c: New file. * scaffold/tinycc/93_integer_promotion.expect: New file. * scaffold/tinycc/COPYING: New file. * scaffold/tinycc/LICENSE: New file. include
2017-07-09 17:33:56 +01:00
// This program is designed to test some arm64-specific things, such as the
// calling convention, but should give the same results on any architecture.
#include <stdarg.h>
#include <stdint.h>
#include <stdio.h>
struct s1 { char x[1]; } s1 = { "0" };
struct s2 { char x[2]; } s2 = { "12" };
struct s3 { char x[3]; } s3 = { "345" };
struct s4 { char x[4]; } s4 = { "6789" };
struct s5 { char x[5]; } s5 = { "abcde" };
struct s6 { char x[6]; } s6 = { "fghijk" };
struct s7 { char x[7]; } s7 = { "lmnopqr" };
struct s8 { char x[8]; } s8 = { "stuvwxyz" };
struct s9 { char x[9]; } s9 = { "ABCDEFGHI" };
struct s10 { char x[10]; } s10 = { "JKLMNOPQRS" };
struct s11 { char x[11]; } s11 = { "TUVWXYZ0123" };
struct s12 { char x[12]; } s12 = { "456789abcdef" };
struct s13 { char x[13]; } s13 = { "ghijklmnopqrs" };
struct s14 { char x[14]; } s14 = { "tuvwxyzABCDEFG" };
struct s15 { char x[15]; } s15 = { "HIJKLMNOPQRSTUV" };
struct s16 { char x[16]; } s16 = { "WXYZ0123456789ab" };
struct s17 { char x[17]; } s17 = { "cdefghijklmnopqrs" };
struct hfa11 { float a; } hfa11 = { 11.1 };
struct hfa12 { float a, b; } hfa12 = { 12.1, 12.2 };
struct hfa13 { float a, b, c; } hfa13 = { 13.1, 13.2, 13.3 };
struct hfa14 { float a, b, c, d; } hfa14 = { 14.1, 14.2, 14.3, 14.4 };
struct hfa21 { double a; } hfa21 = { 21.1 };
struct hfa22 { double a, b; } hfa22 = { 22.1, 22.2 };
struct hfa23 { double a, b, c; } hfa23 = { 23.1, 23.2, 23.3 };
struct hfa24 { double a, b, c, d; } hfa24 = { 24.1, 24.2, 24.3, 24.4 };
struct hfa31 { long double a; } hfa31 = { 31.1 };
struct hfa32 { long double a, b; } hfa32 = { 32.1, 32.2 };
struct hfa33 { long double a, b, c; } hfa33 = { 33.1, 33.2, 33.3 };
struct hfa34 { long double a, b, c, d; } hfa34 = { 34.1, 34.2, 34.3, 34.4 };
void fa_s1(struct s1 a) { printf("%.1s\n", a.x); }
void fa_s2(struct s2 a) { printf("%.2s\n", a.x); }
void fa_s3(struct s3 a) { printf("%.3s\n", a.x); }
void fa_s4(struct s4 a) { printf("%.4s\n", a.x); }
void fa_s5(struct s5 a) { printf("%.5s\n", a.x); }
void fa_s6(struct s6 a) { printf("%.6s\n", a.x); }
void fa_s7(struct s7 a) { printf("%.7s\n", a.x); }
void fa_s8(struct s8 a) { printf("%.8s\n", a.x); }
void fa_s9(struct s9 a) { printf("%.9s\n", a.x); }
void fa_s10(struct s10 a) { printf("%.10s\n", a.x); }
void fa_s11(struct s11 a) { printf("%.11s\n", a.x); }
void fa_s12(struct s12 a) { printf("%.12s\n", a.x); }
void fa_s13(struct s13 a) { printf("%.13s\n", a.x); }
void fa_s14(struct s14 a) { printf("%.14s\n", a.x); }
void fa_s15(struct s15 a) { printf("%.15s\n", a.x); }
void fa_s16(struct s16 a) { printf("%.16s\n", a.x); }
void fa_s17(struct s17 a) { printf("%.17s\n", a.x); }
void fa_hfa11(struct hfa11 a)
{ printf("%.1f\n", a.a); }
void fa_hfa12(struct hfa12 a)
{ printf("%.1f %.1f\n", a.a, a.a); }
void fa_hfa13(struct hfa13 a)
{ printf("%.1f %.1f %.1f\n", a.a, a.b, a.c); }
void fa_hfa14(struct hfa14 a)
{ printf("%.1f %.1f %.1f %.1f\n", a.a, a.b, a.c, a.d); }
void fa_hfa21(struct hfa21 a)
{ printf("%.1f\n", a.a); }
void fa_hfa22(struct hfa22 a)
{ printf("%.1f %.1f\n", a.a, a.a); }
void fa_hfa23(struct hfa23 a)
{ printf("%.1f %.1f %.1f\n", a.a, a.b, a.c); }
void fa_hfa24(struct hfa24 a)
{ printf("%.1f %.1f %.1f %.1f\n", a.a, a.b, a.c, a.d); }
void fa_hfa31(struct hfa31 a)
{ printf("%.1Lf\n", a.a); }
void fa_hfa32(struct hfa32 a)
{ printf("%.1Lf %.1Lf\n", a.a, a.a); }
void fa_hfa33(struct hfa33 a)
{ printf("%.1Lf %.1Lf %.1Lf\n", a.a, a.b, a.c); }
void fa_hfa34(struct hfa34 a)
{ printf("%.1Lf %.1Lf %.1Lf %.1Lf\n", a.a, a.b, a.c, a.d); }
void fa1(struct s8 a, struct s9 b, struct s10 c, struct s11 d,
struct s12 e, struct s13 f)
{
printf("%.3s %.3s %.3s %.3s %.3s %.3s\n", a.x, b.x, c.x, d.x, e.x, f.x);
}
void fa2(struct s9 a, struct s10 b, struct s11 c, struct s12 d,
struct s13 e, struct s14 f)
{
printf("%.3s %.3s %.3s %.3s %.3s %.3s\n", a.x, b.x, c.x, d.x, e.x, f.x);
}
void fa3(struct hfa14 a, struct hfa23 b, struct hfa32 c)
{
printf("%.1f %.1f %.1f %.1f %.1Lf %.1Lf\n",
a.a, a.d, b.a, b.c, c.a, c.b);
}
void fa4(struct s1 a, struct hfa14 b, struct s2 c, struct hfa24 d,
struct s3 e, struct hfa34 f)
{
printf("%.1s %.1f %.1f %.2s %.1f %.1f %.3s %.1Lf %.1Lf\n",
a.x, b.a, b.d, c.x, d.a, d.d, e.x, f.a, f.d);
}
void arg(void)
{
printf("Arguments:\n");
fa_s1(s1);
fa_s2(s2);
fa_s3(s3);
fa_s4(s4);
fa_s5(s5);
fa_s6(s6);
fa_s7(s7);
fa_s8(s8);
fa_s9(s9);
fa_s10(s10);
fa_s11(s11);
fa_s12(s12);
fa_s13(s13);
fa_s14(s14);
fa_s15(s15);
fa_s16(s16);
fa_s17(s17);
fa_hfa11(hfa11);
fa_hfa12(hfa12);
fa_hfa13(hfa13);
fa_hfa14(hfa14);
fa_hfa21(hfa21);
fa_hfa22(hfa22);
fa_hfa23(hfa23);
fa_hfa24(hfa24);
fa_hfa31(hfa31);
fa_hfa32(hfa32);
fa_hfa33(hfa33);
fa_hfa34(hfa34);
fa1(s8, s9, s10, s11, s12, s13);
fa2(s9, s10, s11, s12, s13, s14);
fa3(hfa14, hfa23, hfa32);
fa4(s1, hfa14, s2, hfa24, s3, hfa34);
}
struct s1 fr_s1(void) { return s1; }
struct s2 fr_s2(void) { return s2; }
struct s3 fr_s3(void) { return s3; }
struct s4 fr_s4(void) { return s4; }
struct s5 fr_s5(void) { return s5; }
struct s6 fr_s6(void) { return s6; }
struct s7 fr_s7(void) { return s7; }
struct s8 fr_s8(void) { return s8; }
struct s9 fr_s9(void) { return s9; }
struct s10 fr_s10(void) { return s10; }
struct s11 fr_s11(void) { return s11; }
struct s12 fr_s12(void) { return s12; }
struct s13 fr_s13(void) { return s13; }
struct s14 fr_s14(void) { return s14; }
struct s15 fr_s15(void) { return s15; }
struct s16 fr_s16(void) { return s16; }
struct s17 fr_s17(void) { return s17; }
struct hfa11 fr_hfa11(void) { return hfa11; }
struct hfa12 fr_hfa12(void) { return hfa12; }
struct hfa13 fr_hfa13(void) { return hfa13; }
struct hfa14 fr_hfa14(void) { return hfa14; }
struct hfa21 fr_hfa21(void) { return hfa21; }
struct hfa22 fr_hfa22(void) { return hfa22; }
struct hfa23 fr_hfa23(void) { return hfa23; }
struct hfa24 fr_hfa24(void) { return hfa24; }
struct hfa31 fr_hfa31(void) { return hfa31; }
struct hfa32 fr_hfa32(void) { return hfa32; }
struct hfa33 fr_hfa33(void) { return hfa33; }
struct hfa34 fr_hfa34(void) { return hfa34; }
void ret(void)
{
struct s1 t1 = fr_s1();
struct s2 t2 = fr_s2();
struct s3 t3 = fr_s3();
struct s4 t4 = fr_s4();
struct s5 t5 = fr_s5();
struct s6 t6 = fr_s6();
struct s7 t7 = fr_s7();
struct s8 t8 = fr_s8();
struct s9 t9 = fr_s9();
struct s10 t10 = fr_s10();
struct s11 t11 = fr_s11();
struct s12 t12 = fr_s12();
struct s13 t13 = fr_s13();
struct s14 t14 = fr_s14();
struct s15 t15 = fr_s15();
struct s16 t16 = fr_s16();
struct s17 t17 = fr_s17();
printf("Return values:\n");
printf("%.1s\n", t1.x);
printf("%.2s\n", t2.x);
printf("%.3s\n", t3.x);
printf("%.4s\n", t4.x);
printf("%.5s\n", t5.x);
printf("%.6s\n", t6.x);
printf("%.7s\n", t7.x);
printf("%.8s\n", t8.x);
printf("%.9s\n", t9.x);
printf("%.10s\n", t10.x);
printf("%.11s\n", t11.x);
printf("%.12s\n", t12.x);
printf("%.13s\n", t13.x);
printf("%.14s\n", t14.x);
printf("%.15s\n", t15.x);
printf("%.16s\n", t16.x);
printf("%.17s\n", t17.x);
printf("%.1f\n", fr_hfa11().a);
printf("%.1f %.1f\n", fr_hfa12().a, fr_hfa12().b);
printf("%.1f %.1f\n", fr_hfa13().a, fr_hfa13().c);
printf("%.1f %.1f\n", fr_hfa14().a, fr_hfa14().d);
printf("%.1f\n", fr_hfa21().a);
printf("%.1f %.1f\n", fr_hfa22().a, fr_hfa22().b);
printf("%.1f %.1f\n", fr_hfa23().a, fr_hfa23().c);
printf("%.1f %.1f\n", fr_hfa24().a, fr_hfa24().d);
printf("%.1Lf\n", fr_hfa31().a);
printf("%.1Lf %.1Lf\n", fr_hfa32().a, fr_hfa32().b);
printf("%.1Lf %.1Lf\n", fr_hfa33().a, fr_hfa33().c);
printf("%.1Lf %.1Lf\n", fr_hfa34().a, fr_hfa34().d);
}
int match(const char **s, const char *f)
{
const char *p = *s;
for (p = *s; *f && *f == *p; f++, p++)
;
if (!*f) {
*s = p - 1;
return 1;
}
return 0;
}
void myprintf(const char *format, ...)
{
const char *s;
va_list ap;
va_start(ap, format);
for (s = format; *s; s++) {
if (match(&s, "%7s")) {
struct s7 t7 = va_arg(ap, struct s7);
printf("%.7s", t7.x);
}
else if (match(&s, "%9s")) {
struct s9 t9 = va_arg(ap, struct s9);
printf("%.9s", t9.x);
}
else if (match(&s, "%hfa11")) {
struct hfa11 x = va_arg(ap, struct hfa11);
printf("%.1f,%.1f", x.a, x.a);
}
else if (match(&s, "%hfa12")) {
struct hfa12 x = va_arg(ap, struct hfa12);
printf("%.1f,%.1f", x.a, x.b);
}
else if (match(&s, "%hfa13")) {
struct hfa13 x = va_arg(ap, struct hfa13);
printf("%.1f,%.1f", x.a, x.c);
}
else if (match(&s, "%hfa14")) {
struct hfa14 x = va_arg(ap, struct hfa14);
printf("%.1f,%.1f", x.a, x.d);
}
else if (match(&s, "%hfa21")) {
struct hfa21 x = va_arg(ap, struct hfa21);
printf("%.1f,%.1f", x.a, x.a);
}
else if (match(&s, "%hfa22")) {
struct hfa22 x = va_arg(ap, struct hfa22);
printf("%.1f,%.1f", x.a, x.b);
}
else if (match(&s, "%hfa23")) {
struct hfa23 x = va_arg(ap, struct hfa23);
printf("%.1f,%.1f", x.a, x.c);
}
else if (match(&s, "%hfa24")) {
struct hfa24 x = va_arg(ap, struct hfa24);
printf("%.1f,%.1f", x.a, x.d);
}
else if (match(&s, "%hfa31")) {
struct hfa31 x = va_arg(ap, struct hfa31);
printf("%.1Lf,%.1Lf", x.a, x.a);
}
else if (match(&s, "%hfa32")) {
struct hfa32 x = va_arg(ap, struct hfa32);
printf("%.1Lf,%.1Lf", x.a, x.b);
}
else if (match(&s, "%hfa33")) {
struct hfa33 x = va_arg(ap, struct hfa33);
printf("%.1Lf,%.1Lf", x.a, x.c);
}
else if (match(&s, "%hfa34")) {
struct hfa34 x = va_arg(ap, struct hfa34);
printf("%.1Lf,%.1Lf", x.a, x.d);
}
else
putchar(*s);
}
putchar('\n');
}
void stdarg(void)
{
printf("stdarg:\n");
myprintf("%9s %9s %9s %9s %9s %9s", s9, s9, s9, s9, s9, s9);
myprintf("%7s %9s %9s %9s %9s %9s", s7, s9, s9, s9, s9, s9);
myprintf("HFA long double:");
myprintf("%hfa34 %hfa34 %hfa34 %hfa34", hfa34, hfa34, hfa34, hfa34);
myprintf("%hfa33 %hfa34 %hfa34 %hfa34", hfa33, hfa34, hfa34, hfa34);
myprintf("%hfa32 %hfa34 %hfa34 %hfa34", hfa32, hfa34, hfa34, hfa34);
myprintf("%hfa31 %hfa34 %hfa34 %hfa34", hfa31, hfa34, hfa34, hfa34);
myprintf("%hfa32 %hfa33 %hfa33 %hfa33 %hfa33",
hfa32, hfa33, hfa33, hfa33, hfa33);
myprintf("%hfa31 %hfa33 %hfa33 %hfa33 %hfa33",
hfa31, hfa33, hfa33, hfa33, hfa33);
myprintf("%hfa33 %hfa33 %hfa33 %hfa33",
hfa33, hfa33, hfa33, hfa33);
myprintf("%hfa34 %hfa32 %hfa32 %hfa32 %hfa32",
hfa34, hfa32, hfa32, hfa32, hfa32);
myprintf("%hfa33 %hfa32 %hfa32 %hfa32 %hfa32",
hfa33, hfa32, hfa32, hfa32, hfa32);
myprintf("%hfa34 %hfa32 %hfa31 %hfa31 %hfa31 %hfa31",
hfa34, hfa32, hfa31, hfa31, hfa31, hfa31);
myprintf("HFA double:");
myprintf("%hfa24 %hfa24 %hfa24 %hfa24", hfa24, hfa24, hfa24, hfa24);
myprintf("%hfa23 %hfa24 %hfa24 %hfa24", hfa23, hfa24, hfa24, hfa24);
myprintf("%hfa22 %hfa24 %hfa24 %hfa24", hfa22, hfa24, hfa24, hfa24);
myprintf("%hfa21 %hfa24 %hfa24 %hfa24", hfa21, hfa24, hfa24, hfa24);
myprintf("%hfa22 %hfa23 %hfa23 %hfa23 %hfa23",
hfa22, hfa23, hfa23, hfa23, hfa23);
myprintf("%hfa21 %hfa23 %hfa23 %hfa23 %hfa23",
hfa21, hfa23, hfa23, hfa23, hfa23);
myprintf("%hfa23 %hfa23 %hfa23 %hfa23",
hfa23, hfa23, hfa23, hfa23);
myprintf("%hfa24 %hfa22 %hfa22 %hfa22 %hfa22",
hfa24, hfa22, hfa22, hfa22, hfa22);
myprintf("%hfa23 %hfa22 %hfa22 %hfa22 %hfa22",
hfa23, hfa22, hfa22, hfa22, hfa22);
myprintf("%hfa24 %hfa22 %hfa21 %hfa21 %hfa21 %hfa21",
hfa24, hfa22, hfa21, hfa21, hfa21, hfa21);
myprintf("HFA float:");
myprintf("%hfa14 %hfa14 %hfa14 %hfa14", hfa14, hfa14, hfa14, hfa14);
myprintf("%hfa13 %hfa14 %hfa14 %hfa14", hfa13, hfa14, hfa14, hfa14);
myprintf("%hfa12 %hfa14 %hfa14 %hfa14", hfa12, hfa14, hfa14, hfa14);
myprintf("%hfa11 %hfa14 %hfa14 %hfa14", hfa11, hfa14, hfa14, hfa14);
myprintf("%hfa12 %hfa13 %hfa13 %hfa13 %hfa13",
hfa12, hfa13, hfa13, hfa13, hfa13);
myprintf("%hfa11 %hfa13 %hfa13 %hfa13 %hfa13",
hfa11, hfa13, hfa13, hfa13, hfa13);
myprintf("%hfa13 %hfa13 %hfa13 %hfa13",
hfa13, hfa13, hfa13, hfa13);
myprintf("%hfa14 %hfa12 %hfa12 %hfa12 %hfa12",
hfa14, hfa12, hfa12, hfa12, hfa12);
myprintf("%hfa13 %hfa12 %hfa12 %hfa12 %hfa12",
hfa13, hfa12, hfa12, hfa12, hfa12);
myprintf("%hfa14 %hfa12 %hfa11 %hfa11 %hfa11 %hfa11",
hfa14, hfa12, hfa11, hfa11, hfa11, hfa11);
}
void pll(unsigned long long x)
{
printf("%llx\n", x);
}
void movi(void)
{
printf("MOVI:\n");
pll(0);
pll(0xabcd);
pll(0xabcd0000);
pll(0xabcd00000000);
pll(0xabcd000000000000);
pll(0xffffabcd);
pll(0xabcdffff);
pll(0xffffffffffffabcd);
pll(0xffffffffabcdffff);
pll(0xffffabcdffffffff);
pll(0xabcdffffffffffff);
pll(0xaaaaaaaa);
pll(0x5555555555555555);
pll(0x77777777);
pll(0x3333333333333333);
pll(0xf8f8f8f8);
pll(0x1e1e1e1e1e1e1e1e);
pll(0x3f803f80);
pll(0x01ff01ff01ff01ff);
pll(0x007fffc0);
pll(0x03fff80003fff800);
pll(0x0007fffffffffe00);
pll(0xabcd1234);
pll(0xabcd00001234);
pll(0xabcd000000001234);
pll(0xabcd12340000);
pll(0xabcd000012340000);
pll(0xabcd123400000000);
pll(0xffffffffabcd1234);
pll(0xffffabcdffff1234);
pll(0xabcdffffffff1234);
pll(0xffffabcd1234ffff);
pll(0xabcdffff1234ffff);
pll(0xabcd1234ffffffff);
pll(0xffffef0123456789);
pll(0xabcdef012345ffff);
pll(0xabcdef0123456789);
}
static uint32_t addip0(uint32_t x) { return x + 0; }
static uint64_t sublp0(uint64_t x) { return x - 0; }
static uint32_t addip123(uint32_t x) { return x + 123; }
static uint64_t addlm123(uint64_t x) { return x + -123; }
static uint64_t sublp4095(uint64_t x) { return x - 4095; }
static uint32_t subim503808(uint32_t x) { return x - -503808; }
static uint64_t addp12345(uint64_t x) { return x + 12345; }
static uint32_t subp12345(uint32_t x) { return x - 12345; }
static uint32_t mvni(uint32_t x) { return 0xffffffff - x; }
static uint64_t negl(uint64_t x) { return 0 - x; }
static uint32_t rsbi123(uint32_t x) { return 123 - x; }
static uint64_t rsbl123(uint64_t x) { return 123 - x; }
static uint32_t andi0(uint32_t x) { return x & 0; }
static uint64_t andlm1(uint64_t x) { return x & -1; }
static uint64_t orrl0(uint64_t x) { return x | 0; }
static uint32_t orrim1(uint32_t x) { return x | -1; }
static uint32_t eori0(uint32_t x) { return x ^ 0; }
static uint64_t eorlm1(uint64_t x) { return x ^ -1; }
static uint32_t and0xf0(uint32_t x) { return x & 0xf0; }
static uint64_t orr0xf0(uint64_t x) { return x | 0xf0; }
static uint64_t eor0xf0(uint64_t x) { return x ^ 0xf0; }
static uint32_t lsli0(uint32_t x) { return x << 0; }
static uint32_t lsri0(uint32_t x) { return x >> 0; }
static int64_t asrl0(int64_t x) { return x >> 0; }
static uint32_t lsli1(uint32_t x) { return x << 1; }
static uint32_t lsli31(uint32_t x) { return x << 31; }
static uint64_t lsll1(uint64_t x) { return x << 1; }
static uint64_t lsll63(uint64_t x) { return x << 63; }
static uint32_t lsri1(uint32_t x) { return x >> 1; }
static uint32_t lsri31(uint32_t x) { return x >> 31; }
static uint64_t lsrl1(uint64_t x) { return x >> 1; }
static uint64_t lsrl63(uint64_t x) { return x >> 63; }
static int32_t asri1(int32_t x) { return x >> 1; }
static int32_t asri31(int32_t x) { return x >> 31; }
static int64_t asrl1(int64_t x) { return x >> 1; }
static int64_t asrl63(int64_t x) { return x >> 63; }
void opi(void)
{
int x = 1000;
pll(addip0(x));
pll(sublp0(x));
pll(addip123(x));
pll(addlm123(x));
pll(sublp4095(x));
pll(subim503808(x));
pll(addp12345(x));
pll(subp12345(x));
pll(mvni(x));
pll(negl(x));
pll(rsbi123(x));
pll(rsbl123(x));
pll(andi0(x));
pll(andlm1(x));
pll(orrl0(x));
pll(orrim1(x));
pll(eori0(x));
pll(eorlm1(x));
pll(and0xf0(x));
pll(orr0xf0(x));
pll(eor0xf0(x));
pll(lsli0(x));
pll(lsri0(x));
pll(asrl0(x));
pll(lsli1(x));
pll(lsli31(x));
pll(lsll1(x));
pll(lsll63(x));
pll(lsri1(x));
pll(lsri31(x));
pll(lsrl1(x));
pll(lsrl63(x));
pll(asri1(x));
pll(asri31(x));
pll(asrl1(x));
pll(asrl63(x));
}
void pcs(void)
{
arg();
ret();
stdarg();
movi();
opi();
}
int main()
{
pcs();
return 0;
}