# Test ASTAT bits with logical left shift (<<=) # mach: bfin .include "testutils.inc" #include "test.h" start .macro __do val:req, shift:req, exp:req # First test when ASTAT starts with all bits cleared imm32 R2, \val; ASTAT = R0; R2 <<= \shift; R3 = ASTAT; CHECKREG R2, (\val << \shift); CHECKREG R3, \exp; # Then test when ASTAT starts with all bits set imm32 R2, \val; ASTAT = R1; R2 <<= \shift; R3 = ASTAT; CHECKREG R3, (\exp) | ~(_AZ|_AN|_V|_V_COPY); .endm .macro _do shift:req, val:req # Automatically test all shifted values .if ((\val << \shift) & 0xffffffff) == 0 __do \val, \shift, _AZ .else .if (\val << \shift) == 0x80000000 __do \val, \shift, _AN .else __do \val, \shift, 0 .endif .endif .if (\val << 1) & 0xffffffff _do \shift, (\val << 1) .endif .endm .macro do shift:req _l_shft_\shift: _do \shift, 1 .endm R0 = 0; R1 = -1; do 0 do 1 do 2 do 3 do 4 do 5 do 6 do 7 do 8 do 9 do 10 do 11 do 12 do 13 do 14 do 15 do 16 do 17 do 18 do 19 do 20 do 21 do 22 do 23 do 24 do 25 do 26 do 27 do 28 do 29 do 30 do 31 pass