From 1fe30216ca6fbee0595a5419a979c8b06ea56a28 Mon Sep 17 00:00:00 2001 From: kitty Date: Sat, 7 Mar 2026 17:18:39 +1100 Subject: replace raw byte execute with assembled execute yay!!!! --- jefs.fs | 52 ++++++++++------------------------------------------ readme.md | 1 - 2 files changed, 10 insertions(+), 43 deletions(-) diff --git a/jefs.fs b/jefs.fs index ef03baf..fba5461 100644 --- a/jefs.fs +++ b/jefs.fs @@ -1,15 +1,4 @@ \ i think something is going on with the stack. i dunno -\ things TODO: -\ standardise stack comment abbrs (i like leo brodie's forth_style.txt) -\ DO LOOP -\ s\" -\ add error handling to compiling words -\ better syscall error handling -\ -\ argc/argv -\ load file -\ DUMP -\ custom Nicer line mode editing (like rlwrap) : cell+ 8 + ; : say ( c-addr u -- ) swap 1 1 syscall3 drop ; @@ -46,27 +35,6 @@ hex : ret, c3 c, ; decimal -: execute [ hex - 4d c, 8b c, 1e c, \ mov r11, [r14] - \ REX.W + 8B /r -- MOV r64, r/m64 - \ rex w (64 bit operand size), r (modrm.reg ext), b (modrm.rm ext) - \ modrm 00 011 110 - \ mod [r/m] reg 1.011 (r11) r/m 1.110 (r14) - 4d c, 8d c, 76 c, 08 c, \ lea r14, [r14+8] - \ REX.W + 8D /r -- LEA r64, m - \ rex w (64 bit operand size), r (modrm.reg ext), b (modrm.rm ext) - \ modrm 01 110 110 - \ mod [r/m+disp8] reg 1.110 (r14) r/m 1.110 (r14) - 41 c, ff c, d3 c, \ call r11 - \ FF /2 -- CALL r/m64 - \ rex b (.rm ext) - \ modrm 11 010 011 - \ mod r/m reg /2 r/m 1.011 (r11) - decimal ] ; - -: ?comp state @ 0<> if 3 error ! handler execute then ; -: ?intr state @ if 4 error ! handler execute then ; - : cells 8 * ; : allot@ here @ swap here +! ; : allot allot@ drop ; @@ -162,20 +130,24 @@ variable disp : modrm, modrm @ c, disp @ ?dup 0<> if c, then ; : mod0 modrm @ 3f and modrm ! ; -: d) dup disp ! ( mod0 ) 0<> if modrm @ 40 or modrm ! then ; \ disp8 or 0 only for now. bug TODO: doesn't put correct .mod bytes +: d) dup disp ! mod0 0<> if modrm @ 40 or modrm ! then ; \ disp8 or 0 only for now. bug TODO: doesn't put correct .mod bytes : disp, disp @ ?dup 0<> if c, then ; : mov, rex, 8b c, modrm @ c, disp, asm$ ; : lea, rex, 8d c, modrm @ c, disp, asm$ ; : call, rex, ff c, /2 modrm @ c, disp, asm$ ; - -\ example idea: (from execute below) -\ rex.w r11, r14 0 d) mov, -\ rex.w r14, r14 8 d) lea, -\ r11 call, decimal \ }}} +\ could be inlined? +: execute [ rex.w r11, r14 0 d) mov, + rex.w r14, r14 8 d) lea, + r11 call, ] ; + +: ?comp state @ 0<> if 3 error ! handler execute then ; +: ?intr state @ if 4 error ! handler execute then ; + + hex : >word ffff and ; : >byte ff and ; @@ -440,8 +412,4 @@ decimal 0 constant version : welcome ." welcome to Jewelforth, version " version u. cr .free ; -\ : execute2 [ rex.w r11, r14 0 d) mov, -\ rex.w r14, r14 8 d) lea, -\ r11 call, ] ; - welcome quit bye diff --git a/readme.md b/readme.md index ecfa81e..0b1b518 100644 --- a/readme.md +++ b/readme.md @@ -13,7 +13,6 @@ i am thinking of completing before that. - `s\"` - `DO` + `LOOP` -- `{+,-}TO` - `\` - reading from files - argc + argv -- cgit v1.2.3