projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
defmethod: make the function known at compile time.
[sbcl.git]
/
src
/
assembly
/
x86
/
arith.lisp
diff --git
a/src/assembly/x86/arith.lisp
b/src/assembly/x86/arith.lisp
index
28d510f
..
ea10b50
100644
(file)
--- a/
src/assembly/x86/arith.lisp
+++ b/
src/assembly/x86/arith.lisp
@@
-21,9
+21,7
@@
(:policy :safe)
(:save-p t))
((:arg x (descriptor-reg any-reg) edx-offset)
(:policy :safe)
(:save-p t))
((:arg x (descriptor-reg any-reg) edx-offset)
- (:arg y (descriptor-reg any-reg)
- ;; this seems wrong esi-offset -- FIXME: What's it mean?
- edi-offset)
+ (:arg y (descriptor-reg any-reg) edi-offset)
(:res res (descriptor-reg any-reg) edx-offset)
(:res res (descriptor-reg any-reg) edx-offset)
@@
-40,12
+38,12
@@
(inst ret)
DO-STATIC-FUN
(inst ret)
DO-STATIC-FUN
+ ;; Same as: (inst enter (fixnumize 1))
(inst push ebp-tn)
(inst push ebp-tn)
- (inst lea ebp-tn (make-ea :dword
- :base esp-tn
- :disp (* 2 n-word-bytes)))
+ (inst mov ebp-tn esp-tn)
(inst sub esp-tn (fixnumize 1))
(inst sub esp-tn (fixnumize 1))
- (inst push (make-ea :dword :base ebp-tn :disp (- n-word-bytes)))
+ (inst push (make-ea :dword :base ebp-tn
+ :disp (frame-byte-offset return-pc-save-offset)))
(inst mov ecx (fixnumize 2)) ; arg count
(inst jmp
(make-ea :dword
(inst mov ecx (fixnumize 2)) ; arg count
(inst jmp
(make-ea :dword
@@
-130,9
+128,10
@@
(inst jmp :z FIXNUM)
(inst push ebp-tn)
(inst jmp :z FIXNUM)
(inst push ebp-tn)
- (inst lea ebp-tn (make-ea :dword :base esp-tn :disp (* 2 n-word-bytes)))
+ (inst mov ebp-tn esp-tn)
(inst sub esp-tn (fixnumize 1))
(inst sub esp-tn (fixnumize 1))
- (inst push (make-ea :dword :base ebp-tn :disp (- n-word-bytes)))
+ (inst push (make-ea :dword :base ebp-tn
+ :disp (frame-byte-offset return-pc-save-offset)))
(inst mov ecx (fixnumize 1)) ; arg count
(inst jmp (make-ea :dword
:disp (+ nil-value (static-fun-offset '%negate))))
(inst mov ecx (fixnumize 1)) ; arg count
(inst jmp (make-ea :dword
:disp (+ nil-value (static-fun-offset '%negate))))
@@
-169,13
+168,20
@@
(inst ret)
DO-STATIC-FUN
(inst ret)
DO-STATIC-FUN
- (move ecx esp-tn)
+ (inst push ebp-tn)
+ (inst mov ebp-tn esp-tn)
(inst sub esp-tn (fixnumize 3))
(inst sub esp-tn (fixnumize 3))
- (inst mov (make-ea :dword
- :base ecx
- :disp (frame-byte-offset ocfp-save-offset))
+ (inst mov (make-ea :dword :base esp-tn
+ :disp (frame-byte-offset
+ (+ sp->fp-offset
+ -3
+ ocfp-save-offset)))
ebp-tn)
ebp-tn)
- (move ebp-tn ecx)
+ (inst lea ebp-tn (make-ea :dword :base esp-tn
+ :disp (frame-byte-offset
+ (+ sp->fp-offset
+ -3
+ ocfp-save-offset))))
(inst mov ecx (fixnumize 2))
(inst call (make-ea :dword
:disp (+ nil-value
(inst mov ecx (fixnumize 2))
(inst call (make-ea :dword
:disp (+ nil-value
@@
-186,6
+192,7
@@
(:l `((inst mov y (1+ nil-value))
(inst cmp y x)))
(:g `((inst cmp x (1+ nil-value)))))
(:l `((inst mov y (1+ nil-value))
(inst cmp y x)))
(:g `((inst cmp x (1+ nil-value)))))
+ (inst pop ebp-tn)
(inst ret))
#-sb-assembling
`(define-vop (,name)
(inst ret))
#-sb-assembling
`(define-vop (,name)
@@
-201,17
+208,11
@@
(:temporary (:sc unsigned-reg :offset edi-offset
:from (:argument 1))
edi)
(:temporary (:sc unsigned-reg :offset edi-offset
:from (:argument 1))
edi)
-
- (:temporary (:sc unsigned-reg :offset ecx-offset
- :from :eval)
- ecx)
(:conditional ,test)
(:generator 10
(move edx x)
(move edi y)
(:conditional ,test)
(:generator 10
(move edx x)
(move edi y)
- (inst lea ecx (make-ea :dword
- :disp (make-fixup ',name :assembly-routine)))
- (inst call ecx)))))
+ (inst call (make-fixup ',name :assembly-routine))))))
(define-cond-assem-rtn generic-< < two-arg-< :l)
(define-cond-assem-rtn generic-> > two-arg-> :g))
(define-cond-assem-rtn generic-< < two-arg-< :l)
(define-cond-assem-rtn generic-> > two-arg-> :g))
@@
-229,7
+230,7
@@
(inst cmp ecx other-pointer-lowtag)
(inst jmp :e DO-STATIC-FUN)
(inst cmp ecx other-pointer-lowtag)
(inst jmp :e DO-STATIC-FUN)
- ;; Not both other pointers
+ ;; At least one fixnum
(inst cmp x y)
RET
(inst ret)
(inst cmp x y)
RET
(inst ret)
@@
-239,18
+240,26
@@
(inst cmp x y)
(inst jmp :e RET)
(inst cmp x y)
(inst jmp :e RET)
- (move ecx esp-tn)
+ (inst push ebp-tn)
+ (inst mov ebp-tn esp-tn)
(inst sub esp-tn (fixnumize 3))
(inst sub esp-tn (fixnumize 3))
- (inst mov (make-ea :dword
- :base ecx
- :disp (frame-byte-offset ocfp-save-offset))
+ (inst mov (make-ea :dword :base esp-tn
+ :disp (frame-byte-offset
+ (+ sp->fp-offset
+ -3
+ ocfp-save-offset)))
ebp-tn)
ebp-tn)
- (move ebp-tn ecx)
+ (inst lea ebp-tn (make-ea :dword :base esp-tn
+ :disp (frame-byte-offset
+ (+ sp->fp-offset
+ -3
+ ocfp-save-offset))))
(inst mov ecx (fixnumize 2))
(inst call (make-ea :dword
:disp (+ nil-value (static-fun-offset 'eql))))
(load-symbol y t)
(inst cmp x y)
(inst mov ecx (fixnumize 2))
(inst call (make-ea :dword
:disp (+ nil-value (static-fun-offset 'eql))))
(load-symbol y t)
(inst cmp x y)
+ (inst pop ebp-tn)
(inst ret))
#-sb-assembling
(inst ret))
#-sb-assembling
@@
-268,16
+277,11
@@
:from (:argument 1))
edi)
:from (:argument 1))
edi)
- (:temporary (:sc unsigned-reg :offset ecx-offset
- :from :eval)
- ecx)
(:conditional :e)
(:generator 10
(move edx x)
(move edi y)
(:conditional :e)
(:generator 10
(move edx x)
(move edi y)
- (inst lea ecx (make-ea :dword
- :disp (make-fixup 'generic-eql :assembly-routine)))
- (inst call ecx)))
+ (inst call (make-fixup 'generic-eql :assembly-routine))))
#+sb-assembling
(define-assembly-routine (generic-=
#+sb-assembling
(define-assembly-routine (generic-=
@@
-296,18
+300,26
@@
(inst ret)
DO-STATIC-FUN
(inst ret)
DO-STATIC-FUN
- (move ecx esp-tn)
+ (inst push ebp-tn)
+ (inst mov ebp-tn esp-tn)
(inst sub esp-tn (fixnumize 3))
(inst sub esp-tn (fixnumize 3))
- (inst mov (make-ea :dword
- :base ecx
- :disp (frame-byte-offset ocfp-save-offset))
+ (inst mov (make-ea :dword :base esp-tn
+ :disp (frame-byte-offset
+ (+ sp->fp-offset
+ -3
+ ocfp-save-offset)))
ebp-tn)
ebp-tn)
- (move ebp-tn ecx)
+ (inst lea ebp-tn (make-ea :dword :base esp-tn
+ :disp (frame-byte-offset
+ (+ sp->fp-offset
+ -3
+ ocfp-save-offset))))
(inst mov ecx (fixnumize 2))
(inst call (make-ea :dword
:disp (+ nil-value (static-fun-offset 'two-arg-=))))
(load-symbol y t)
(inst cmp x y)
(inst mov ecx (fixnumize 2))
(inst call (make-ea :dword
:disp (+ nil-value (static-fun-offset 'two-arg-=))))
(load-symbol y t)
(inst cmp x y)
+ (inst pop ebp-tn)
(inst ret))
#-sb-assembling
(inst ret))
#-sb-assembling
@@
-325,16
+337,11
@@
:from (:argument 1))
edi)
:from (:argument 1))
edi)
- (:temporary (:sc unsigned-reg :offset ecx-offset
- :from :eval)
- ecx)
(:conditional :e)
(:generator 10
(move edx x)
(move edi y)
(:conditional :e)
(:generator 10
(move edx x)
(move edi y)
- (inst lea ecx (make-ea :dword
- :disp (make-fixup 'generic-= :assembly-routine)))
- (inst call ecx)))
+ (inst call (make-fixup 'generic-= :assembly-routine))))
\f
;;; Support for the Mersenne Twister, MT19937, random number generator
\f
;;; Support for the Mersenne Twister, MT19937, random number generator