// Test long long support #include #include struct udivrem { uint64_t q; uint64_t r; }; struct divrem { int64_t q; int64_t r; }; extern int64_t _ll_from_u(uint32_t); extern int64_t _ll_from_l( int32_t); extern uint32_t _ll_to_l ( int64_t); extern int64_t _ll_add ( int64_t, int64_t); extern int64_t _ll_addlu( int64_t, uint32_t); extern int64_t _ll_addls( int64_t, int32_t); extern int64_t _ll_adduu(uint32_t, uint32_t); extern int64_t _ll_addss( int32_t, int32_t); extern int64_t _ll_sub ( int64_t, int64_t); extern int64_t _ll_sublu( int64_t, uint32_t); extern int64_t _ll_subls( int64_t, int32_t); extern int64_t _ll_subuu(uint32_t, uint32_t); extern int64_t _ll_subss( int32_t, int32_t); extern int64_t _ll_rsb ( int64_t, int64_t); extern int64_t _ll_rsblu( int64_t, uint32_t); extern int64_t _ll_rsbls( int64_t, int32_t); extern int64_t _ll_rsbuu(uint32_t, uint32_t); extern int64_t _ll_rsbss( int32_t, int32_t); extern int64_t _ll_mul ( int64_t, int64_t); extern int64_t _ll_mullu( int64_t, uint32_t); extern int64_t _ll_mulls( int64_t, int32_t); extern int64_t _ll_muluu(uint32_t, uint32_t); extern int64_t _ll_mulss( int32_t, int32_t); extern __value_in_regs struct udivrem _ll_udiv (uint64_t, uint64_t); extern __value_in_regs struct udivrem _ll_urdv (uint64_t, uint64_t); extern __value_in_regs struct udivrem _ll_udiv10(uint64_t); extern __value_in_regs struct divrem _ll_sdiv ( int64_t, int64_t); extern __value_in_regs struct divrem _ll_srdv ( int64_t, int64_t); extern __value_in_regs struct divrem _ll_sdiv10( int64_t); extern int64_t _ll_not( int64_t); extern int64_t _ll_neg( int64_t); extern int64_t _ll_and( int64_t, int64_t); extern int64_t _ll_or ( int64_t, int64_t); extern int64_t _ll_eor( int64_t, int64_t); extern uint64_t _ll_shift_l (uint64_t, uint32_t); extern uint64_t _ll_ushift_r(uint64_t, uint32_t); extern int64_t _ll_sshift_r( int64_t, uint32_t); int main(void) { FILE *f = fopen("inputs", "r"); while (!feof(f)) { int64_t a,b; fscanf(f, "%016llX %016llX\n", &a, &b); struct udivrem udr; struct divrem dr; printf("%016llX %016llX " "%016llX %016llX %08X " "%016llX %016llX %016llX %016llX %016llX " "%016llX %016llX %016llX %016llX %016llX " "%016llX %016llX %016llX %016llX %016llX " "%016llX %016llX %016llX %016llX %016llX ", a, b, _ll_from_u(a), _ll_from_l(a), _ll_to_l(a), _ll_add(a,b), _ll_addlu(a,b), _ll_addls(a,b), _ll_adduu(a,b), _ll_addss(a,b), _ll_sub(a,b), _ll_sublu(a,b), _ll_subls(a,b), _ll_subuu(a,b), _ll_subss(a,b), _ll_rsb(a,b), _ll_rsblu(a,b), _ll_rsbls(a,b), _ll_rsbuu(a,b), _ll_rsbss(a,b), _ll_mul(a,b), _ll_mullu(a,b), _ll_mulls(a,b), _ll_muluu(a,b), _ll_mulss(a,b)); udr = b == 0 ? (struct udivrem) { 0, 0 } : _ll_udiv(a,b); printf("%016llX %016llX ", udr.q, udr.r); udr = a == 0 ? (struct udivrem) { 0, 0 } : _ll_urdv(a,b); printf("%016llX %016llX ", udr.q, udr.r); udr = _ll_udiv10(a); printf("%016llX %016llX ", udr.q, udr.r); dr = b == 0 ? (struct divrem) { 0, 0 } : _ll_sdiv(a,b); printf("%016llX %016llX ", dr.q, dr.r); dr = a == 0 ? (struct divrem) { 0, 0 } : _ll_srdv(a,b); printf("%016llX %016llX ", dr.q, dr.r); dr = _ll_sdiv10(a); printf("%016llX %016llX ", dr.q, dr.r); printf("%016llX %016llX %016llX %016llX %016llX " "%016llX %016llX %016llX\n", _ll_not(a), _ll_neg(a), _ll_and(a,b), _ll_or(a,b), _ll_eor(a,b), _ll_shift_l(a,b&0x3F), _ll_ushift_r(a,b&0x3F), _ll_sshift_r(a,b&0x3F)); } fclose(f); return 0; }