checking size of arguments

bop   src1 (a) dest (c), src2 (b)    + ldx stx
jop   disp (a) src1 (c), src2 (b)    + efor
jt    disp (a) src1 (c)
jmp   disp (a)   
call  a2   (a) a1   (c), ads  (b)
case  lo   (a) src  (c), hi   (b)
sys   src1 (a) num  (c), src2 (b)
fun   arty (a) fs   (c)
ret   src  (a) fs   (c)
push  src  (a)

note: do not have to check mov

bop:  add sub mul div mod and or xor 
      eq ne lt le gt ge shl shr not
jop:  jeq jne jlt jle jgt jge 
      jt jf jmp efor

when an argument is too large:

argument is source,   mov v A, op v
            dest,     op v, mov A v

divide instructions into groups:

type    inst.        check (16), (10)

outb    add...ldx       src1, dest
outc    stx,call        src1, dest
outj    jop,efor,case   ..  , srcC
outs    ret,push,sys    srcA,  ...

outb   
  chk src1, do mov
  chk dest, do op,mov

outc  
  chk src1, do mov
  chk dest, do mov,op

outj
  chk srcC, do mov,op

outs
  chk srcA, do mov,op

in the end I found the following:

  outj < outc    because no chk for disp (a) 
  outs < outc    because no chk for src (c)

hence we only need outb and outc.

20 Dec 2010


