* gcc.target/i386/pr70021.c: Add -mtune=skylake.
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / iamcu / args.h
blob67808ffb5657893baa927a85fcaff8783f1b5e28
1 #ifndef INCLUDED_ARGS_H
2 #define INCLUDED_ARGS_H
4 /* This defines the calling sequences for integers and floats. */
5 #define I0 eax
6 #define I1 edx
7 #define I2 ecx
9 typedef unsigned int size_t;
11 extern void (*callthis)(void);
12 extern unsigned long eax,ebx,ecx,edx,esi,edi,esp,ebp;
13 extern unsigned long sret_eax;
14 extern volatile unsigned long volatile_var;
15 extern void snapshot (void);
16 extern void snapshot_ret (void);
17 extern void *iamcu_memset (void *, int, size_t);
18 #define WRAP_CALL(N) \
19 (callthis = (void (*)()) (N), (typeof (&N)) snapshot)
20 #define WRAP_RET(N) \
21 (callthis = (void (*)()) (N), (typeof (&N)) snapshot_ret)
23 /* Clear all scratch integer registers. */
24 #define clear_int_hardware_registers \
25 asm __volatile__ ("xor %%eax, %%eax\n\t" \
26 "xor %%edx, %%edx\n\t" \
27 "xor %%ecx, %%ecx\n\t" \
28 ::: "eax", "edx", "ecx");
30 /* Clear all scratch integer registers, excluding the one used to return
31 aggregate. */
32 #define clear_non_sret_int_hardware_registers \
33 asm __volatile__ ("xor %%edx, %%edx\n\t" \
34 "xor %%ecx, %%ecx\n\t" \
35 ::: "edx", "ecx");
37 /* This is the list of registers available for passing arguments. Not all of
38 these are used or even really available. */
39 struct IntegerRegisters
41 unsigned long eax, ebx, ecx, edx, esi, edi;
44 /* Implemented in scalarargs.c */
45 extern struct IntegerRegisters iregs, iregbits;
46 extern unsigned int num_iregs;
48 #define check_int_arguments do { \
49 assert (num_iregs <= 0 || (iregs.I0 & iregbits.I0) == (I0 & iregbits.I0)); \
50 assert (num_iregs <= 1 || (iregs.I1 & iregbits.I1) == (I1 & iregbits.I1)); \
51 assert (num_iregs <= 2 || (iregs.I2 & iregbits.I2) == (I2 & iregbits.I2)); \
52 } while (0)
54 #define check_char_arguments check_int_arguments
55 #define check_short_arguments check_int_arguments
56 #define check_long_arguments check_int_arguments
57 #define check_float_arguments check_int_arguments
58 #define check_double_arguments check_int_arguments
59 #define check_ldouble_arguments check_int_arguments
61 /* Clear register struct. */
62 #define clear_struct_registers \
63 eax = edx = ecx = 0; \
64 iamcu_memset (&iregs, 0, sizeof iregs);
66 /* Clear both hardware and register structs for integers. */
67 #define clear_int_registers \
68 clear_struct_registers \
69 clear_int_hardware_registers
71 /* Clear both hardware and register structs for integers, excluding the
72 one used to return aggregate. */
73 #define clear_non_sret_int_registers \
74 clear_struct_registers \
75 clear_non_sret_int_hardware_registers
77 #endif /* INCLUDED_ARGS_H */