change in gencode

lastArg     arg:24 op:8
lastCP

outc  op dest src1 src2

outJmp     location of argument
> outc tJmp d 0 0

optJmp
  patch -- must correct location of arguments

final
  patchArg 

gencase
  outc tCase v1 lo hi
  patch entry in jump vector

patchbreak
  patchArg

genput
  patchArg

relocjmp
  patchArg

---------------

icode

outc op a1 a2 a3
  a1:24 op:8, a2:32, a3:32

patch ads v = CS[ads] = v

patchArg ads v =
  CS[ads] = enc2 v (opAt ads)

------------------

v5 format

  a1:24 op:8, a2:32, a3:32

mV:
  bop not mov ldx stx push
  call callt 

bop   dest (a1) src1 (a2) src2 (a3)
ldx   dest (a1) base (a2) idx (a3)
stx   src  (a1) base (a2) idx (a3)
not   dest (a1) src  (a2)
mov   dest (a1) src  (a2)
push  src  (a1)
call  arg1 (a1) arg2 (a2) ads (a3)

mJ:

jmp  disp (a1)
jt   disp (a1) src  (a2)
jop  disp (a1) src1 (a2) src2 (a3)
efor disp (a1) src++ (a2) src2 (a3)

mG:   generic

ret   retv (a1)  fs (a2)
nop

other  fun case sys

fun   arity (a1)  fs (a2)
case  src (a1)  lo (a2)  hi (a3)
sys   num (a1)  arg1 (a2)  arg2 (a3)

12 Dec 2010

change in compiler, in som 5

for i start to end
  body

is compiled to

      mov i (start-1) 
      jmp cond
loop: body
cond: efor loop i end
      
one surplus jump "jmp cond" is done. This can be improved by testing before begin body.

      mov i start
      jgt exit i end
loop: body
      efor loop i end
exit: ...

15 Dec 2010
