@@ -720,6 +720,28 @@ Each register plays the same role as in x86, so for example
720720 A predicate for offsets.
721721}
722722
723+ @defproc[(64-bit-integer? [x any/c]) boolean?]{
724+ A predicate for determining if a value is an integer that fits in 64-bits.
725+
726+ @ex[
727+ (64-bit-integer? 0 )
728+ (64-bit-integer? (sub1 (expt 2 64 )))
729+ (64-bit-integer? (expt 2 64 ))
730+ (64-bit-integer? (- (expt 2 63 )))
731+ (64-bit-integer? (sub1 (- (expt 2 63 ))))]
732+ }
733+
734+ @defproc[(32-bit-integer? [x any/c]) boolean?]{
735+ A predicate for determining if a value is an integer that fits in 64-bits.
736+
737+ @ex[
738+ (32-bit-integer? 0 )
739+ (32-bit-integer? (sub1 (expt 2 32 )))
740+ (32-bit-integer? (expt 2 32 ))
741+ (32-bit-integer? (- (expt 2 32 )))
742+ (32-bit-integer? (sub1 (- (expt 2 32 ))))]
743+ }
744+
723745@defproc[(seq [x (or/c instruction? (listof instruction?))] ... ) (listof instruction?)]{
724746 A convenience function for splicing togeter instructions and lists of instructions.
725747
@@ -866,7 +888,7 @@ Each register plays the same role as in x86, so for example
866888
867889}
868890
869- @defstruct*[Mov ([dst (or/c register? offset?)] [src (or/c register? offset? exact -integer?)])]{
891+ @defstruct*[Mov ([dst (or/c register? offset?)] [src (or/c register? offset? 64-bit -integer?)])]{
870892
871893 A move instruction. Moves @racket[src] to @racket[dst].
872894
@@ -885,7 +907,7 @@ Each register plays the same role as in x86, so for example
885907
886908}
887909
888- @defstruct*[Add ([dst register?] [src (or/c register? offset? exact -integer?)])]{
910+ @defstruct*[Add ([dst register?] [src (or/c register? offset? 32-bit -integer?)])]{
889911
890912 An addition instruction. Adds @racket[src] to @racket[dst]
891913 and writes the result to @racket[dst].
@@ -901,7 +923,7 @@ Each register plays the same role as in x86, so for example
901923 ]
902924}
903925
904- @defstruct*[Sub ([dst register?] [src (or/c register? offset? exact -integer?)])]{
926+ @defstruct*[Sub ([dst register?] [src (or/c register? offset? 32-bit -integer?)])]{
905927
906928 A subtraction instruction. Subtracts @racket[src] frrom
907929 @racket[dst] and writes the result to @racket[dst].
@@ -917,7 +939,7 @@ Each register plays the same role as in x86, so for example
917939 ]
918940}
919941
920- @defstruct*[Cmp ([a1 (or/c register? offset?)] [a2 (or/c register? offset? exact -integer?)])]{
942+ @defstruct*[Cmp ([a1 (or/c register? offset?)] [a2 (or/c register? offset? 32-bit -integer?)])]{
921943 Compare @racket[a1] to @racket[a2]. Doing a comparison
922944 sets the status flags that affect the conditional instructions like @racket[Je], @racket[Jl], etc.
923945
@@ -1028,7 +1050,7 @@ Each register plays the same role as in x86, so for example
10281050 ]
10291051}
10301052
1031- @defstruct*[And ([dst (or/c register? offset?)] [src (or/c register? offset? exact -integer?)])]{
1053+ @defstruct*[And ([dst (or/c register? offset?)] [src (or/c register? offset? 32-bit -integer?)])]{
10321054 Compute logical ``and '' of @racket[dst] and @racket[src] and put result in @racket[dst].
10331055
10341056 @#reader scribble/comment-reader
@@ -1043,7 +1065,7 @@ Each register plays the same role as in x86, so for example
10431065 )
10441066}
10451067
1046- @defstruct*[Or ([dst (or/c register? offset?)] [src (or/c register? offset? exact -integer?)])]{
1068+ @defstruct*[Or ([dst (or/c register? offset?)] [src (or/c register? offset? 32-bit -integer?)])]{
10471069 Compute logical ``or '' of @racket[dst] and @racket[src] and put result in @racket[dst].
10481070
10491071 @#reader scribble/comment-reader
@@ -1058,7 +1080,7 @@ Each register plays the same role as in x86, so for example
10581080 )
10591081}
10601082
1061- @defstruct*[Xor ([dst (or/c register? offset?)] [src (or/c register? offset? exact -integer?)])]{
1083+ @defstruct*[Xor ([dst (or/c register? offset?)] [src (or/c register? offset? 32-bit -integer?)])]{
10621084 Compute logical ``exclusive or '' of @racket[dst] and @racket[src] and put result in @racket[dst].
10631085
10641086 @#reader scribble/comment-reader
@@ -1113,7 +1135,7 @@ Each register plays the same role as in x86, so for example
11131135 )
11141136}
11151137
1116- @defstruct*[Push ([a1 (or/c exact -integer? register?)])]{
1138+ @defstruct*[Push ([a1 (or/c 32-bit -integer? register?)])]{
11171139
11181140 Decrements the stack pointer and then stores the source
11191141 operand on the top of the stack.
0 commit comments