4 ### Generate input script and expected output for bit manipulation,
5 ### particularly 64-bit arithmetic.
16 def arg(default
= None):
23 SEED
= int(arg(R
.randrange(0, 1 << 32)))
26 print '### Test vectors for 64-bit arithmetic macros'
27 print '### [generated; seed = 0x%08x]' % SEED
29 def rol(x
, n
): return ((x
<< n
) |
(x
>> (WD
- n
))) & MASK
30 def ror(x
, n
): return ((x
>> n
) |
(x
<< (WD
- n
))) & MASK
31 def put(x
): return '%0*x' %
(WD
/4, x
)
33 for name
, func
in [('lsl', lambda x
, n
: x
<< n
),
34 ('lsr', lambda x
, n
: x
>> n
),
37 print '\n%s64 {' % name
38 for i
in xrange(NVEC
):
39 x
= R
.randrange(LIMIT
)
40 sh
= R
.randrange(0, 70) & 63
41 print ' %s %2d %s;' %
(put(x
), sh
, put(func(x
, sh
) & MASK
))
43 x
= R
.randrange(LIMIT
)
45 print ' %s %2d %s;' %
(put(x
), sh
, put(func(x
, sh
) & MASK
))
48 for name
, func
in [('add', lambda x
, y
: x
+ y
),
49 ('sub', lambda x
, y
: x
- y
)]:
50 print '\n%s64 {' % name
51 for i
in xrange(NVEC
):
52 x
= R
.randrange(LIMIT
)
53 y
= R
.randrange(LIMIT
)
54 print ' %s %s %s;' %
(put(x
), put(y
), put(func(x
, y
) & MASK
))