1# Test ASTAT bits with logical left shift (<<=) 2# mach: bfin 3 4.include "testutils.inc" 5#include "test.h" 6start 7 8.macro __do val:req, shift:req, exp:req 9 # First test when ASTAT starts with all bits cleared 10 imm32 R2, \val; 11 ASTAT = R0; 12 R2 <<= \shift; 13 R3 = ASTAT; 14 CHECKREG R2, (\val << \shift); 15 CHECKREG R3, \exp; 16 17 # Then test when ASTAT starts with all bits set 18 imm32 R2, \val; 19 ASTAT = R1; 20 R2 <<= \shift; 21 R3 = ASTAT; 22 CHECKREG R3, (\exp) | ~(_AZ|_AN|_V|_V_COPY); 23.endm 24 25.macro _do shift:req, val:req 26 # Automatically test all shifted values 27 .if ((\val << \shift) & 0xffffffff) == 0 28 __do \val, \shift, _AZ 29 .else 30 .if (\val << \shift) == 0x80000000 31 __do \val, \shift, _AN 32 .else 33 __do \val, \shift, 0 34 .endif 35 .endif 36 .if (\val << 1) & 0xffffffff 37 _do \shift, (\val << 1) 38 .endif 39.endm 40 41.macro do shift:req 42_l_shft_\shift: 43 _do \shift, 1 44.endm 45 46R0 = 0; 47R1 = -1; 48 49do 0 50do 1 51do 2 52do 3 53do 4 54do 5 55do 6 56do 7 57do 8 58do 9 59do 10 60do 11 61do 12 62do 13 63do 14 64do 15 65do 16 66do 17 67do 18 68do 19 69do 20 70do 21 71do 22 72do 23 73do 24 74do 25 75do 26 76do 27 77do 28 78do 29 79do 30 80do 31 81 82pass 83