c43f4962e8b196565ffb3cd783fb3783261b373e
4 ### Generate input script and expected output for bit manipulation,
5 ### particularly 64-bit arithmetic.
10 if SYS
.version_info
>= (3,): xrange = range
17 ARGS
= SYS
.argv
[1:]; ARGS
.reverse()
18 def arg(default
= None):
19 if len(ARGS
): return ARGS
.pop()
24 if seed
is None: SEED
= R
.randrange(0, 1 << 32)
25 else: SEED
= int(seed
, 0)
28 print('### Test vectors for 64-bit arithmetic macros')
29 print('### [generated; seed = 0x%08x]' % SEED
)
31 def rol(x
, n
): return ((x
<< n
) |
(x
>> (WD
- n
))) & MASK
32 def ror(x
, n
): return ((x
>> n
) |
(x
<< (WD
- n
))) & MASK
33 def put(x
): return '%0*x' %
(WD
//4, x
)
35 for name
, func
in [('lsl', lambda x
, n
: x
<< n
),
36 ('lsr', lambda x
, n
: x
>> n
),
39 print('\n%s64 {' % name
)
40 for i
in xrange(NVEC
):
41 x
= R
.randrange(LIMIT
)
42 sh
= R
.randrange(0, 70) & 63
43 print(' %s %2d %s;' %
(put(x
), sh
, put(func(x
, sh
) & MASK
)))
45 x
= R
.randrange(LIMIT
)
47 print(' %s %2d %s;' %
(put(x
), sh
, put(func(x
, sh
) & MASK
)))
50 for name
, func
in [('add', lambda x
, y
: x
+ y
),
51 ('sub', lambda x
, y
: x
- y
)]:
52 print('\n%s64 {' % name
)
53 for i
in xrange(NVEC
):
54 x
= R
.randrange(LIMIT
)
55 y
= R
.randrange(LIMIT
)
56 print(' %s %s %s;' %
(put(x
), put(y
), put(func(x
, y
) & MASK
)))