not qword [rsp]
next
- WORD p_false, 'FALSE',fasm
+ WORD p_false, 'FALSE',dovalue
;; ( -- 0 )
;; Push a false flag, 0.
- push qword 0
- next
+ dq 0
- WORD p_true, 'TRUE',fasm
+ WORD p_true, 'TRUE',dovalue
;; ( -- true )
;; Return a true flag, -1. (non-zero)
- push qword -1
+ dq -1
+
+pop_false_next:
+ mov qword [rsp],0
+ next
+
+pop_true_next:
+ mov qword [rsp],-1
next
WORD p_within, 'WITHIN',fasm
pop rax
pop rbx
cmp qword [rsp],rbx
- jl p_within_not
+ jl pop_false_next
cmp qword [rsp],rax
- jge p_within_not
- not rcx
-p_within_not:
- next
-
+ jge pop_false_next
+ jmp pop_true_next
+
WORD p_0less, '0<',fasm
;; ( n -- flag )
;; flag is true (non-zero) if and only if n is less than zero.
- xor rax,rax
cmp qword [rsp],0
- jge p_0less.lt
- not rax
-p_0less.lt:
- next
+ jl pop_true_next
+ jmp pop_false_next
WORD p_0equal, '0=',fasm
;; ( x -- flag )
;; flag is true if x is equal to zero otherwise false.
- xor rax,rax
cmp qword [rsp],0
- jne p_0equal.ne
- not rax
-p_0equal.ne:
- next
+ je pop_true_next
+ jmp pop_false_next
WORD p_lessthan, '<',fasm
;; ( n1 n2 -- flag )
;; flag is true if and only if n1 is less than n2.
- xor rax,rax
- pop rbx
- cmp qword [rsp], rbx
- jge p_lessthan.ge
- not rax
-p_lessthan.ge:
- mov qword [rsp], rax
- next
+ pop rax
+ cmp qword [rsp],rax
+ jl pop_true_next
+ jmp pop_false_next
+
+ WORD p_lessequal, '<=',fasm
+ ;; ( n1 n2 -- flag )
+ ;; flag is true if and only if n1 is less than n2.
+ pop rax
+ cmp qword [rsp],rax
+ jle pop_true_next
+ jmp pop_false_next
WORD p_equal, '=',fasm
;; ( x1 x2 -- flag )
;; flag is true if and only if x1 is bit-for-bit the same as
;; x2.
- xor rax,rax
- pop rbx
- cmp qword [rsp], rbx
- jne p_equal.ne
- not rax
-p_equal.ne:
- mov qword [rsp], rax
- next
+ pop rax
+ cmp qword [rsp],rax
+ je pop_true_next
+ jmp pop_false_next
+ WORD p_unequal, '!=',fasm
+ ;; ( x1 x2 -- flag )
+ ;; flag is true if and only if x1 is bit-for-bit the same as
+ ;; x2.
+ pop rax
+ cmp qword [rsp],rax
+ jne pop_true_next
+ jmp pop_false_next
+
WORD p_greaterthan, '>',fasm
;; ( n1 n2 -- flag )
;; flag is true if and only if n1 is greater than n2.
- xor rax,rax
- pop rbx
- cmp qword [rsp], rbx
- jle p_greaterthan.le
- not rax
-p_greaterthan.le:
- mov qword [rsp], rax
- next
+ pop rax
+ cmp qword [rsp],rax
+ jg pop_true_next
+ jmp pop_false_next
+ WORD p_greaterequal, '>=',fasm
+ ;; ( n1 n2 -- flag )
+ ;; flag is true if and only if n1 is greater than n2.
+ pop rax
+ cmp qword [rsp],rax
+ jge pop_true_next
+ jmp pop_false_next