+ DO-STATIC-FUN
+ (move ecx esp-tn)
+ (inst sub esp-tn (fixnumize 3))
+ (inst mov (make-ea :dword
+ :base ecx :disp (fixnumize -1))
+ ebp-tn)
+ (move ebp-tn ecx)
+ (inst mov ecx (fixnumize 2))
+ (inst call (make-ea :dword
+ :disp (+ nil-value
+ (static-fun-offset ',static-fn))))
+ ;; HACK: We depend on NIL having the lowest address of all
+ ;; static symbols (including T)
+ ,@(ecase test
+ (:l `((inst mov y (1+ nil-value))
+ (inst cmp y x)))
+ (:g `((inst cmp x (1+ nil-value)))))
+ (inst ret))
+ #-sb-assembling
+ `(define-vop (,name)
+ (:translate ,translate)
+ (:policy :safe)
+ (:save-p t)
+ (:args (x :scs (descriptor-reg any-reg) :target edx)
+ (y :scs (descriptor-reg any-reg) :target edi))
+
+ (:temporary (:sc unsigned-reg :offset edx-offset
+ :from (:argument 0))
+ edx)
+ (: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)
+ (inst lea ecx (make-ea :dword
+ :disp (make-fixup ',name :assembly-routine)))
+ (inst call ecx)))))
+
+ (define-cond-assem-rtn generic-< < two-arg-< :l)
+ (define-cond-assem-rtn generic-> > two-arg-> :g))
+
+#+sb-assembling