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