1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
fun pr i = (print (IntInf.fmt StringCvt.HEX i);
print "\n")
fun prBin oper a b c =
(print " A: ";
pr a;
print " B: ";
pr b;
print ("A " ^ oper ^ " B: ");
pr c)
fun prUn oper a c =
(print " A: ";
pr a;
print (oper ^ " A: ");
pr c)
fun prSh oper w a c =
let
val s = Word.fmt StringCvt.HEX w
val sp = CharVector.tabulate(String.size s, fn _ => #" ")
in
print (" " ^ sp ^ "A: ");
pr a;
print ("A " ^ oper ^ " " ^ s ^ ": ");
pr c
end
fun mkInt i n = if n = 0
then i
else mkInt (IntInf.+ (IntInf.* (i, IntInf.fromInt 10),i))
(n - 1)
val mkInt = fn i => fn n => mkInt (IntInf.fromInt i) n
fun tryBin' (a, b) =
let
val _ = prBin "&" a b (IntInf.andb (a, b))
val _ = prBin "|" a b (IntInf.orb (a, b))
val _ = prBin "^" a b (IntInf.xorb (a, b))
in
()
end
fun tryBin (a, b) =
let
val _ = tryBin' (a, b)
val _ = tryBin' (IntInf.~ a, b)
val _ = tryBin' (a, IntInf.~ b)
val _ = tryBin' (IntInf.~ a, IntInf.~ b)
in
()
end
fun tryUn' a =
let
val _ = prUn "!" a (IntInf.notb a)
in
()
end
fun tryUn a =
let
val _ = tryUn' a
val _ = tryUn' (IntInf.~ a)
in
()
end
fun trySh' a =
let
val _ = List.app (fn w => prSh "~>>" w a (IntInf.~>> (a, w)))
[0wx0, 0wx1, 0wx2, 0wxF, 0wx10, 0wx11, 0wx12]
val _ = List.app (fn w => prSh " <<" w a (IntInf.<< (a, w)))
[0wx0, 0wx1, 0wx2, 0wxF, 0wx10, 0wx11, 0wx12]
in
()
end
fun trySh a =
let
(*
val _ = trySh' a
*)
val _ = trySh' (IntInf.~ a)
in
()
end
fun loop (n', m') (n, m) =
let
fun loop' i =
let
fun loop'' j =
if j > m
then loop' (i + 1)
else (tryBin (mkInt i j, mkInt i j);
tryBin (mkInt i j, mkInt (i + 1) j);
tryBin (mkInt i j, mkInt i (j + 1));
tryBin (mkInt i j, mkInt (i + 1) (j + 1));
tryUn (mkInt i j);
trySh (mkInt i j);
loop'' (j + 1))
in
if i > n
then ()
else loop'' m'
end
in
loop' n'
end
val _ = loop (0, 0) (3, 3)
val _ = loop (0, 8) (3, 10)
val _ = loop (0, 20) (3, 22)
val _ = loop (0, 30) (3, 31)
|