X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;f=compile.asm;h=d06913876a00feab6e6a6a2d74815cc3166b1f7c;hb=c7022e938a1d35c0929374616a871c2caba15598;hp=83343845d727e108ece6026c29a662655dd27221;hpb=43ce8fb4d65924e1bcf21cac510f8e48fc1d451d;p=rrq%2Frrqforth.git diff --git a/compile.asm b/compile.asm index 8334384..d069138 100644 --- a/compile.asm +++ b/compile.asm @@ -137,12 +137,12 @@ p_create_COPY: WORD p_number,'NUMBER',fasm ;; ( chars* n -- [ 0 ]/[ v 1 ] ) pushr rsi - pop rcx - pop rsi + pop rcx ; ( -- chars* ) + pop rsi ; ( -- ) xor rdi,rdi p_number_LOOP: dec rbx - je p_number_DONE + jl p_number_DONE lodsb mov bl,al ; into bl cmp bl,'0' @@ -150,8 +150,6 @@ p_number_LOOP: cmp bl,'9' jg p_number_ALPHA sub bl,'0' - cmp bl,bl - jge p_number_BAD p_number_CONSUME: mov rax,rdi mul qword [p_base_DFA] @@ -196,22 +194,20 @@ p_evaluate_stream_LOOP: dq p_2dup ; ( -- chars* n chars* n ) dq p_this_word ; ( -- chars* n chars* n p ) dq p_2put ; ( -- chars* n ) - dq p_2dup ; ( -- chars* n chars* n ) - dq p_find ; ( -- chars* n tfa/0 ) - dq p_dup ; ( -- chars* n tfa/0 tfa/0 ) + dq p_find ; ( -- [ chars* n 0 ]/[ tfa ] ) + dq p_dup ; ( -- [ chars* n 0 0 ]/[ tfa tfa ] ) BRANCH 0,p_evaluate_stream_NOTWORD ; ( -- chars* n tfa/0 ) dq p_execute ; ( -- chars* n tfa/0 ) BRANCH ,p_evaluate_stream_LOOP p_evaluate_stream_NOTWORD: - dq p_this_word ; ( -- chars* n tfa/0 ) - dq p_2get - dq p_number - dq p_not - BRANCH 0,p_evaluate_stream_LOOP - dq p_literal - dq 0 - dq p_exit + dq p_drop ; ( -- chars* n ) + dq p_number ; ( -- [ 0 ]/[ v 1 ] ) + dq p_dup + BRANCH 0,p_evaluate_stream_BAD + dq p_drop + BRANCH ,p_evaluate_stream_LOOP p_evaluate_stream_END: dq p_literal dq 1 +p_evaluate_stream_BAD: dq p_exit