mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-02-13 15:31:09 +00:00
JIT tuning parameters
This commit is contained in:
parent
8c18a28e49
commit
81574a8a62
@ -35,7 +35,7 @@ def compiler(defptr)#0
|
||||
word codeptr, addrxlate, bytecode, i, case, dest
|
||||
byte j
|
||||
|
||||
puts("JIT compiler invoked!\n")
|
||||
//puts("JIT compiler invoked!\n")
|
||||
|
||||
addrxlate = heapalloc(512 + defptr->bytecodesize) // 256 * sizeof(word) address xlate
|
||||
if not addrxlate
|
||||
@ -54,9 +54,9 @@ def compiler(defptr)#0
|
||||
*$003E = *$003C + defptr->bytecodesize
|
||||
*$0042 = bytecode
|
||||
call($C311, 0, 0, 0, $00) // CALL XMOVE with carry clear (AUX->MAIN)
|
||||
^$C053 // MIX TEXT
|
||||
puts("Addr Xlate: $"); puth(addrxlate); putln
|
||||
puts("Bytecode: $"); puth(bytecode); putln
|
||||
//^$C053 // MIX TEXT
|
||||
////puts("Addr Xlate: $"); puth(addrxlate); putln
|
||||
////puts("Bytecode: $"); puth(bytecode); putln
|
||||
//
|
||||
// Compile the bytecodes
|
||||
//
|
||||
@ -79,11 +79,11 @@ def compiler(defptr)#0
|
||||
fin
|
||||
addrxlate=>[i] = codeptr
|
||||
//putc('$'); puth(codeptr); putc(':')
|
||||
//putc('['); puti(i); puts("] ")
|
||||
//putc('['); puti(i); //puts("] ")
|
||||
if ^(bytecode+i) < $20
|
||||
// CN,CN,CN,CN,CN,CN,CN,CN ; 00 02 04 06 08 0A 0C 0E
|
||||
// CN,CN,CN,CN,CN,CN,CN,CN ; 10 12 14 16 18 1A 1C 1E
|
||||
puts("CN $"); putb(^(bytecode+i)/2)
|
||||
//puts("CN $"); putb(^(bytecode+i)/2)
|
||||
^codeptr = $CA; codeptr++ // DEX
|
||||
^codeptr = $A9; codeptr++ // LDA #imm
|
||||
^codeptr = ^(bytecode+i)/2; codeptr++
|
||||
@ -97,7 +97,7 @@ def compiler(defptr)#0
|
||||
when ^(bytecode+i)
|
||||
// MINUS1,BREQ,BRNE,LA,LLA,CB,CW,CS ; 20 22 24 26 28 2A 2C 2E
|
||||
is $20
|
||||
puts("MINUS_ONE")
|
||||
//puts("MINUS_ONE")
|
||||
^codeptr = $CA; codeptr++ // DEX
|
||||
^codeptr = $A9; codeptr++ // LDA #imm
|
||||
^codeptr = $FF; codeptr++ // $FF
|
||||
@ -110,7 +110,7 @@ def compiler(defptr)#0
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
i++
|
||||
puts("BREQ "); puti(dest)
|
||||
//puts("BREQ "); puti(dest)
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
@ -136,7 +136,7 @@ def compiler(defptr)#0
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
i++
|
||||
puts("BRNE "); puti(dest)
|
||||
//puts("BRNE "); puti(dest)
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
@ -160,7 +160,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $26
|
||||
i++
|
||||
puts("LA $"); puth(*(bytecode+i))
|
||||
//puts("LA $"); puth(*(bytecode+i))
|
||||
^codeptr = $CA; codeptr++ // DEX
|
||||
^codeptr = $A9; codeptr++ // LDA #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
@ -174,7 +174,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $28
|
||||
i++
|
||||
puts("LLA "); puti(^(bytecode+i))
|
||||
//puts("LLA "); puti(^(bytecode+i))
|
||||
^codeptr = $CA; codeptr++ // DEX
|
||||
^codeptr = $A9; codeptr++ // LDA #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
@ -192,7 +192,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $2A
|
||||
i++
|
||||
puts("CB $"); putb(^(bytecode+i))
|
||||
//puts("CB $"); putb(^(bytecode+i))
|
||||
^codeptr = $CA; codeptr++ // DEX
|
||||
^codeptr = $A9; codeptr++ // LDA #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
@ -205,7 +205,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $2C
|
||||
i++
|
||||
puts("CW $"); puth(*(bytecode+i))
|
||||
//puts("CW $"); puth(*(bytecode+i))
|
||||
^codeptr = $CA; codeptr++ // DEX
|
||||
^codeptr = $A9; codeptr++ // LDA #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
@ -221,7 +221,7 @@ def compiler(defptr)#0
|
||||
i++
|
||||
j = ^(bytecode+i)
|
||||
dest = i + j + 1
|
||||
puts("CS "); puts(bytecode+i); puts("-->"); puti(dest)
|
||||
//puts("CS "); //puts(bytecode+i); //puts("-->"); puti(dest)
|
||||
if isule(codeptr + 12 + j, codemax)
|
||||
^codeptr = $CA; codeptr++ // DEX
|
||||
^codeptr = $A9; codeptr++ // LDA #imm
|
||||
@ -247,16 +247,16 @@ def compiler(defptr)#0
|
||||
break
|
||||
// DROP,DROP2,DUP,DIVMOD,ADDI,SUBI,ANDI,ORI ; 30 32 34 36 38 3A 3C 3E
|
||||
is $30
|
||||
puts("DROP")
|
||||
//puts("DROP")
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
break
|
||||
is $32
|
||||
puts("DROP2")
|
||||
//puts("DROP2")
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
break
|
||||
is $34
|
||||
puts("DUP")
|
||||
//puts("DUP")
|
||||
^codeptr = $CA; codeptr++ // DEX
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0+1; codeptr++ // ESTKL+1
|
||||
@ -268,14 +268,14 @@ def compiler(defptr)#0
|
||||
^codeptr = $C0; codeptr++ // ESTKH
|
||||
break
|
||||
is $36
|
||||
puts("DIVMOD")
|
||||
//puts("DIVMOD")
|
||||
//
|
||||
// Should never happen
|
||||
//
|
||||
break
|
||||
is $38
|
||||
i++
|
||||
puts("ADDI $"); putb(^(bytecode+i))
|
||||
//puts("ADDI $"); putb(^(bytecode+i))
|
||||
^codeptr = $A9; codeptr++ // LDA #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
^codeptr = $18; codeptr++ // CLC
|
||||
@ -290,7 +290,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $3A
|
||||
i++
|
||||
puts("SUBI $"); putb(^(bytecode+i))
|
||||
//puts("SUBI $"); putb(^(bytecode+i))
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $18; codeptr++ // SEC
|
||||
@ -305,7 +305,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $3C
|
||||
i++
|
||||
puts("ANDI $"); putb(^(bytecode+i))
|
||||
//puts("ANDI $"); putb(^(bytecode+i))
|
||||
^codeptr = $A9; codeptr++ // LDA #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
^codeptr = $35; codeptr++ // AND zp,X
|
||||
@ -319,7 +319,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $3E
|
||||
i++
|
||||
puts("ORI $"); putb(^(bytecode+i))
|
||||
//puts("ORI $"); putb(^(bytecode+i))
|
||||
^codeptr = $A9; codeptr++ // LDA #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
^codeptr = $15; codeptr++ // ORA zp,X
|
||||
@ -329,7 +329,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
// ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E
|
||||
is $40
|
||||
puts("ISEQ")
|
||||
//puts("ISEQ")
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
^codeptr = $00; codeptr++ // $00
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
@ -352,7 +352,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
break
|
||||
is $42
|
||||
puts("ISNE")
|
||||
//puts("ISNE")
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
^codeptr = $FF; codeptr++ // $FF
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
@ -375,7 +375,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
break
|
||||
is $44
|
||||
puts("ISGT")
|
||||
//puts("ISGT")
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
^codeptr = $FF; codeptr++ // $FF
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
@ -400,7 +400,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
break
|
||||
is $46
|
||||
puts("ISLT")
|
||||
//puts("ISLT")
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
^codeptr = $FF; codeptr++ // $FF
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
@ -425,7 +425,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
break
|
||||
is $48
|
||||
puts("ISGE")
|
||||
//puts("ISGE")
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
^codeptr = $FF; codeptr++ // $FF
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
@ -450,7 +450,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
break
|
||||
is $4A
|
||||
puts("ISLE")
|
||||
//puts("ISLE")
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
^codeptr = $FF; codeptr++ // $FF
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
@ -478,7 +478,7 @@ def compiler(defptr)#0
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
i++
|
||||
puts("BRFLS "); puti(dest)
|
||||
//puts("BRFLS "); puti(dest)
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0-1; codeptr++ // ESTKL-1
|
||||
@ -497,7 +497,7 @@ def compiler(defptr)#0
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
i++
|
||||
puts("BRTRU "); puti(dest)
|
||||
//puts("BRTRU "); puti(dest)
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0-1; codeptr++ // ESTKL-1
|
||||
@ -517,7 +517,7 @@ def compiler(defptr)#0
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
i++
|
||||
puts("BRNCH "); puti(dest)
|
||||
//puts("BRNCH "); puti(dest)
|
||||
^codeptr = $4C; codeptr++ // JMP abs
|
||||
*codeptr = addrxlate=>[dest]
|
||||
if not (*codeptr & $8000) // Unresolved address list
|
||||
@ -529,7 +529,7 @@ def compiler(defptr)#0
|
||||
i++
|
||||
case = i + *(bytecode+i)
|
||||
i++
|
||||
puts("SEL "); puti(case); putln
|
||||
//puts("SEL "); puti(case); putln
|
||||
j = ^(bytecode+case)
|
||||
dest = codeptr + 8 + case * 11)
|
||||
if isule(dest, codemax)
|
||||
@ -541,7 +541,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $C0; codeptr++ // ESTKH
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
repeat
|
||||
puts(" $"); puth(*(bytecode+case))
|
||||
//puts(" $"); puth(*(bytecode+case))
|
||||
^codeptr = $C9; codeptr++ // CMP #imm
|
||||
^codeptr = ^(bytecode+case); codeptr++
|
||||
^codeptr = $D0; codeptr++ // BNE rel
|
||||
@ -552,7 +552,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $03; codeptr++ // +3
|
||||
*(bytecode+case) = $FFFF
|
||||
case = case + 2
|
||||
puts("-->"); puti(case + *(bytecode+case)); putln
|
||||
//puts("-->"); puti(case + *(bytecode+case)); putln
|
||||
^codeptr = $4C; codeptr++ // JMP abs
|
||||
*codeptr = addrxlate=>[case]
|
||||
if not (*codeptr & $8000) // Unresolved address list
|
||||
@ -575,7 +575,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $54
|
||||
i++
|
||||
puts("CALL $"); puth(*(bytecode+i))
|
||||
//puts("CALL $"); puth(*(bytecode+i))
|
||||
//
|
||||
// Call address
|
||||
//
|
||||
@ -584,7 +584,7 @@ def compiler(defptr)#0
|
||||
i++
|
||||
break
|
||||
is $56
|
||||
puts("ICAL")
|
||||
//puts("ICAL")
|
||||
//
|
||||
// Pull address off stack
|
||||
//
|
||||
@ -606,7 +606,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $58
|
||||
i++
|
||||
puts("ENTER "); puti(^(bytecode+i)); putc(',');puti(^(bytecode+i+1))
|
||||
//puts("ENTER "); puti(^(bytecode+i)); putc(',');puti(^(bytecode+i+1))
|
||||
//
|
||||
// Call into VM
|
||||
//
|
||||
@ -620,7 +620,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $5A
|
||||
i++
|
||||
puts("LEAVE "); puti(^(bytecode+i))
|
||||
//puts("LEAVE "); puti(^(bytecode+i))
|
||||
//
|
||||
// Call into VM
|
||||
//
|
||||
@ -630,12 +630,12 @@ def compiler(defptr)#0
|
||||
^codeptr = ^(bytecode+i); codeptr++ // LEAVE OPERAND
|
||||
break
|
||||
is $5C
|
||||
puts("RET")
|
||||
//puts("RET")
|
||||
^codeptr = $60; codeptr++ // RTS
|
||||
break
|
||||
is $5E
|
||||
i++
|
||||
puts("CFFB $FF"); putb(^(bytecode+i))
|
||||
//puts("CFFB $FF"); putb(^(bytecode+i))
|
||||
^codeptr = $CA; codeptr++ // DEX
|
||||
^codeptr = $A9; codeptr++ // LDA #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
@ -648,7 +648,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
// LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E
|
||||
is $60
|
||||
puts("LB")
|
||||
//puts("LB")
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $95; codeptr++ // STA zp,X
|
||||
@ -663,7 +663,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $C0; codeptr++ // ESTKH
|
||||
break
|
||||
is $62
|
||||
puts("LW")
|
||||
//puts("LW")
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $95; codeptr++ // STA zp,X
|
||||
@ -685,7 +685,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $64
|
||||
i++
|
||||
puts("LLB "); puti(^(bytecode+i))
|
||||
//puts("LLB "); puti(^(bytecode+i))
|
||||
^codeptr = $CA; codeptr++ // DEX
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
@ -700,7 +700,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $66
|
||||
i++
|
||||
puts("LLW "); puti(^(bytecode+i))
|
||||
//puts("LLW "); puti(^(bytecode+i))
|
||||
^codeptr = $CA; codeptr++ // DEX
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
@ -716,7 +716,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $68
|
||||
i++
|
||||
puts("LAB $"); puth(*(bytecode+i))
|
||||
//puts("LAB $"); puth(*(bytecode+i))
|
||||
^codeptr = $CA; codeptr++ // DEX
|
||||
^codeptr = $AD; codeptr++ // LDA abs
|
||||
*codeptr = *(bytecode+i); codeptr = codeptr + 2
|
||||
@ -730,7 +730,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $6A
|
||||
i++
|
||||
puts("LAW $"); puth(*(bytecode+i))
|
||||
//puts("LAW $"); puth(*(bytecode+i))
|
||||
^codeptr = $CA; codeptr++ // DEX
|
||||
^codeptr = $AD; codeptr++ // LDA abs
|
||||
*codeptr = *(bytecode+i); codeptr = codeptr + 2
|
||||
@ -744,7 +744,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $6C
|
||||
i++
|
||||
puts("DLB "); puti(^(bytecode+i))
|
||||
//puts("DLB "); puti(^(bytecode+i))
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
@ -754,7 +754,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $6E
|
||||
i++
|
||||
puts("DLW "); puti(^(bytecode+i))
|
||||
//puts("DLW "); puti(^(bytecode+i))
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
@ -769,7 +769,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
// SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E
|
||||
is $70
|
||||
puts("SB")
|
||||
//puts("SB")
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $95; codeptr++ // STA zp,X
|
||||
@ -782,7 +782,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
break
|
||||
is $72
|
||||
puts("SW")
|
||||
//puts("SW")
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $95; codeptr++ // STA zp,X
|
||||
@ -806,7 +806,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $74
|
||||
i++
|
||||
puts("SLB "); puti(^(bytecode+i))
|
||||
//puts("SLB "); puti(^(bytecode+i))
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
@ -817,7 +817,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $76
|
||||
i++
|
||||
puts("SLW "); puti(^(bytecode+i))
|
||||
//puts("SLW "); puti(^(bytecode+i))
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
@ -833,7 +833,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $78
|
||||
i++
|
||||
puts("SAB $"); puth(*(bytecode+i))
|
||||
//puts("SAB $"); puth(*(bytecode+i))
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $8D; codeptr++ // STA abs
|
||||
@ -843,7 +843,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $7A
|
||||
i++
|
||||
puts("SAW $"); puth(*(bytecode+i))
|
||||
//puts("SAW $"); puth(*(bytecode+i))
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $8D; codeptr++ // STA abs
|
||||
@ -857,7 +857,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $7C
|
||||
i++
|
||||
puts("DAB $"); puth(*(bytecode+i))
|
||||
//puts("DAB $"); puth(*(bytecode+i))
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $8D; codeptr++ // STA abs
|
||||
@ -866,7 +866,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $7E
|
||||
i++
|
||||
puts("DAW $"); puth(*(bytecode+i))
|
||||
//puts("DAW $"); puth(*(bytecode+i))
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $8D; codeptr++ // STA abs
|
||||
@ -879,7 +879,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
// LNOT,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 80 82 84 86 88 8A 8C 8E
|
||||
is $80
|
||||
puts("NOT")
|
||||
//puts("NOT")
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $15; codeptr++ // ORA zp,X
|
||||
@ -896,7 +896,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $C0; codeptr++ // ESTKH
|
||||
break
|
||||
is $82
|
||||
puts("ADD")
|
||||
//puts("ADD")
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $18; codeptr++ // CLC
|
||||
@ -913,7 +913,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
break
|
||||
is $84
|
||||
puts("SUB")
|
||||
//puts("SUB")
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0+1; codeptr++ // ESTKL+1
|
||||
^codeptr = $38; codeptr++ // SEC
|
||||
@ -930,7 +930,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
break
|
||||
is $86
|
||||
puts("MUL")
|
||||
//puts("MUL")
|
||||
//
|
||||
// Call into VM
|
||||
//
|
||||
@ -940,7 +940,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $C0; codeptr++ // NATV CODE
|
||||
break
|
||||
is $88
|
||||
puts("DIV")
|
||||
//puts("DIV")
|
||||
//
|
||||
// Call into VM
|
||||
//
|
||||
@ -950,7 +950,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $C0; codeptr++ // NATV CODE
|
||||
break
|
||||
is $8A
|
||||
puts("MOD")
|
||||
//puts("MOD")
|
||||
//
|
||||
// Call into VM
|
||||
//
|
||||
@ -960,7 +960,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $C0; codeptr++ // NATV CODE
|
||||
break
|
||||
is $8C
|
||||
puts("INCR")
|
||||
//puts("INCR")
|
||||
^codeptr = $F6; codeptr++ // INC zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $D0; codeptr++ // BNE rel
|
||||
@ -969,7 +969,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $C0; codeptr++ // ESTKH
|
||||
break
|
||||
is $8E
|
||||
puts("DECR")
|
||||
//puts("DECR")
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $D0; codeptr++ // BNE rel
|
||||
@ -981,7 +981,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
// NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 90 92 94 96 98 9A 9C 9E
|
||||
is $90
|
||||
puts("NEG")
|
||||
//puts("NEG")
|
||||
^codeptr = $A9; codeptr++ // LDA #imm
|
||||
^codeptr = $00; codeptr++ // $00
|
||||
^codeptr = $38; codeptr++ // SEC
|
||||
@ -997,7 +997,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $C0; codeptr++ // ESTKH
|
||||
break
|
||||
is $92
|
||||
puts("COMP")
|
||||
//puts("COMP")
|
||||
^codeptr = $A9; codeptr++ // LDA #imm
|
||||
^codeptr = $FF; codeptr++ // $FF
|
||||
^codeptr = $55; codeptr++ // EOR zp,X
|
||||
@ -1012,7 +1012,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $C0; codeptr++ // ESTKH
|
||||
break
|
||||
is $94
|
||||
puts("AND")
|
||||
//puts("AND")
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $35; codeptr++ // AND zp,X
|
||||
@ -1028,7 +1028,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
break
|
||||
is $96
|
||||
puts("OR")
|
||||
//puts("OR")
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $15; codeptr++ // ORA zp,X
|
||||
@ -1044,7 +1044,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
break
|
||||
is $98
|
||||
puts("XOR")
|
||||
//puts("XOR")
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $55; codeptr++ // EOR zp,X
|
||||
@ -1060,7 +1060,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
break
|
||||
is $9A
|
||||
puts("SHL")
|
||||
//puts("SHL")
|
||||
//
|
||||
// Call into VM
|
||||
//
|
||||
@ -1070,7 +1070,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $C0; codeptr++ // NATV CODE
|
||||
break
|
||||
is $9C
|
||||
puts("SHR")
|
||||
//puts("SHR")
|
||||
//
|
||||
// Call into VM
|
||||
//
|
||||
@ -1080,7 +1080,7 @@ def compiler(defptr)#0
|
||||
^codeptr = $C0; codeptr++ // NATV CODE
|
||||
break
|
||||
is $9E
|
||||
puts("IDXW")
|
||||
//puts("IDXW")
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $0A; codeptr++ // ASL
|
||||
@ -1103,7 +1103,7 @@ def compiler(defptr)#0
|
||||
is $A0
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
puts("BRGT "); puti(dest)
|
||||
//puts("BRGT "); puti(dest)
|
||||
i++
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0+1; codeptr++ // ESTKL+1
|
||||
@ -1131,7 +1131,7 @@ def compiler(defptr)#0
|
||||
is $A2
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
puts("BRLT "); puti(dest)
|
||||
//puts("BRLT "); puti(dest)
|
||||
i++
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
@ -1159,7 +1159,7 @@ def compiler(defptr)#0
|
||||
is $A4
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
puts("INCBRLE "); puti(dest)
|
||||
//puts("INCBRLE "); puti(dest)
|
||||
i++
|
||||
//
|
||||
// INCR
|
||||
@ -1199,7 +1199,7 @@ def compiler(defptr)#0
|
||||
is $A6
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
puts("ADDBRLE "); puti(dest)
|
||||
//puts("ADDBRLE "); puti(dest)
|
||||
i++
|
||||
//
|
||||
// ADD
|
||||
@ -1247,7 +1247,7 @@ def compiler(defptr)#0
|
||||
is $A8
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
puts("DECBRGE "); puti(dest)
|
||||
//puts("DECBRGE "); puti(dest)
|
||||
i++
|
||||
//
|
||||
// DECR
|
||||
@ -1289,7 +1289,7 @@ def compiler(defptr)#0
|
||||
is $AA
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
puts("SUBBRGE "); puti(dest)
|
||||
//puts("SUBBRGE "); puti(dest)
|
||||
i++
|
||||
//
|
||||
// SUB
|
||||
@ -1338,7 +1338,7 @@ def compiler(defptr)#0
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
i++
|
||||
puts("BRAND "); puti(dest)
|
||||
//puts("BRAND "); puti(dest)
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $15; codeptr++ // ORA zp,X
|
||||
@ -1357,7 +1357,7 @@ def compiler(defptr)#0
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
i++
|
||||
puts("BROR "); puti(dest)
|
||||
//puts("BROR "); puti(dest)
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0; codeptr++ // ESTKL
|
||||
^codeptr = $15; codeptr++ // ORA zp,X
|
||||
@ -1375,7 +1375,7 @@ def compiler(defptr)#0
|
||||
// ADDLB,ADDLW,ADDAB,ADDAW,IDXLB,IDXLW,IDXAB,IDXAW ; B0 B2 B4 B6 B8 BA BC BE
|
||||
is $B0
|
||||
i++
|
||||
puts("ADDLB "); puti(^(bytecode+i))
|
||||
//puts("ADDLB "); puti(^(bytecode+i))
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
^codeptr = $B1; codeptr++ // LDA (zp),Y
|
||||
@ -1392,7 +1392,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $B2
|
||||
i++
|
||||
puts("ADDLW "); puti(^(bytecode+i))
|
||||
//puts("ADDLW "); puti(^(bytecode+i))
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
^codeptr = $B1; codeptr++ // LDA (zp),Y
|
||||
@ -1412,7 +1412,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $B4
|
||||
i++
|
||||
puts("ADDAB $"); puth(*(bytecode+i))
|
||||
//puts("ADDAB $"); puth(*(bytecode+i))
|
||||
^codeptr = $AD; codeptr++ // LDA abs
|
||||
*codeptr = *(bytecode+i); codeptr = codeptr + 2
|
||||
^codeptr = $18; codeptr++ // CLC
|
||||
@ -1428,7 +1428,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $B6
|
||||
i++
|
||||
puts("ADDAW $"); puth(*(bytecode+i))
|
||||
//puts("ADDAW $"); puth(*(bytecode+i))
|
||||
^codeptr = $AD; codeptr++ // LDA abs
|
||||
*codeptr = *(bytecode+i); codeptr = codeptr + 2
|
||||
^codeptr = $18; codeptr++ // CLC
|
||||
@ -1446,7 +1446,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $B8
|
||||
i++
|
||||
puts("IDXLB "); puti(^(bytecode+i))
|
||||
//puts("IDXLB "); puti(^(bytecode+i))
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
^codeptr = $B1; codeptr++ // LDA (zp),Y
|
||||
@ -1470,7 +1470,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $BA
|
||||
i++
|
||||
puts("IDXLW "); puti(^(bytecode+i))
|
||||
//puts("IDXLW "); puti(^(bytecode+i))
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
^codeptr = ^(bytecode+i); codeptr++
|
||||
^codeptr = $B1; codeptr++ // LDA (zp),Y
|
||||
@ -1498,7 +1498,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $BC
|
||||
i++
|
||||
puts("IDXAB $"); puth(*(bytecode+i))
|
||||
//puts("IDXAB $"); puth(*(bytecode+i))
|
||||
^codeptr = $AD; codeptr++ // LDA abs
|
||||
*codeptr = *(bytecode+i); codeptr = codeptr + 2
|
||||
^codeptr = $A0; codeptr++ // LDY #imm
|
||||
@ -1521,7 +1521,7 @@ def compiler(defptr)#0
|
||||
break
|
||||
is $BE
|
||||
i++
|
||||
puts("IDXAW $"); puth(*(bytecode+i))
|
||||
//puts("IDXAW $"); puth(*(bytecode+i))
|
||||
^codeptr = $AD; codeptr++ // LDA abs
|
||||
*codeptr = *(bytecode+i); codeptr = codeptr + 2
|
||||
^codeptr = $0A; codeptr++ // ASL
|
||||
@ -1548,10 +1548,10 @@ def compiler(defptr)#0
|
||||
is $FF // NOPed out earlier by SELect
|
||||
break
|
||||
otherwise
|
||||
putc('$'); puth(^(bytecode+i))
|
||||
//putc('$'); puth(^(bytecode+i))
|
||||
wend
|
||||
fin
|
||||
putln
|
||||
//putln
|
||||
i++
|
||||
if i >= defptr->bytecodesize
|
||||
//
|
||||
@ -1564,11 +1564,11 @@ def compiler(defptr)#0
|
||||
// Free working bufffers
|
||||
//
|
||||
heaprelease(addrxlate)
|
||||
puts("Done compiling: $"); puth(defptr=>interpaddr); putln
|
||||
getc
|
||||
//puts("Done compiling: $"); puth(defptr=>interpaddr); putln
|
||||
//getc
|
||||
return
|
||||
fin
|
||||
getc
|
||||
//getc
|
||||
loop
|
||||
//
|
||||
// If we got here. we ran out of code buffer space. Overwrite interpreter
|
||||
@ -1579,8 +1579,8 @@ def compiler(defptr)#0
|
||||
// Free working bufffers
|
||||
//
|
||||
heaprelease(addrxlate)
|
||||
puts("Ran out of code buffer\n")
|
||||
getc
|
||||
//puts("Ran out of code buffer\n")
|
||||
//getc
|
||||
end
|
||||
//
|
||||
// Install JIT compiler
|
||||
|
38
src/libsrc/apple/jitune.pla
Normal file
38
src/libsrc/apple/jitune.pla
Normal file
@ -0,0 +1,38 @@
|
||||
//
|
||||
// PLASMA JIT bytecode compiler
|
||||
//
|
||||
include "inc/cmdsys.plh"
|
||||
include "inc/args.plh"
|
||||
const jitcount = syserr+1
|
||||
const jitsize = jitcount+1
|
||||
const jitwarmup = jitsize+1
|
||||
|
||||
word arg
|
||||
|
||||
def atoi(strptr)
|
||||
word num
|
||||
num = 0
|
||||
|
||||
if ^strptr < '0' or ^strptr > '9'
|
||||
repeat
|
||||
num = num * 10 + ^strptr - '0'
|
||||
strptr++
|
||||
until ^strptr < '0' or ^strptr > '9'
|
||||
fin
|
||||
return num
|
||||
end
|
||||
|
||||
arg = argNext(argFirst)
|
||||
if ^arg
|
||||
cmdsys.jitcount = atoi(arg)
|
||||
arg = argNext(arg)
|
||||
if ^arg
|
||||
cmdsys:warmup = atoi(arg)
|
||||
arg = argNext(arg)
|
||||
if ^arg
|
||||
cmdsys.jitsize = atoi(arg)
|
||||
fin
|
||||
fin
|
||||
else
|
||||
puts("Usage: JITUNE CALLCOUNT [WARMUP [MAXSIZE]]\n")
|
||||
fin
|
@ -39,9 +39,9 @@ end
|
||||
//
|
||||
// JIT compiler constants
|
||||
//
|
||||
const jitcount = $01//$10
|
||||
const jitcomp = $03E2
|
||||
const jitcodeptr = $03E4
|
||||
const jitwarming = $03E6
|
||||
const jitcode = $BF00
|
||||
//
|
||||
// Pedefined functions.
|
||||
@ -60,6 +60,9 @@ word syspath
|
||||
word syscmdln
|
||||
word = @execmod, @open, @close, @read, @write
|
||||
byte perr
|
||||
byte jitcount = $10
|
||||
byte jitsize = $FF
|
||||
word jitwarmup = $0100
|
||||
//
|
||||
// Working input buffer overlayed with strings table
|
||||
//
|
||||
@ -140,7 +143,7 @@ word sysmodsym = @exports
|
||||
//
|
||||
word systemflags = 0
|
||||
word heap
|
||||
word xheap = $0800
|
||||
word xheap = $0C00//$0800 Skip text page2 for double lores
|
||||
word lastsym = symtbl
|
||||
//
|
||||
// Utility functions
|
||||
@ -988,12 +991,12 @@ def allocxheap(size)#1
|
||||
xheap = xaddr + size
|
||||
fin
|
||||
fin
|
||||
if systemflags & restxt2
|
||||
if uword_isle(xaddr, $0C00) and uword_isgt(xheap, $0800)
|
||||
xaddr = $0C00
|
||||
xheap = xaddr + size
|
||||
fin
|
||||
fin
|
||||
//if systemflags & restxt2
|
||||
// if uword_isle(xaddr, $0C00) and uword_isgt(xheap, $0800)
|
||||
// xaddr = $0C00
|
||||
// xheap = xaddr + size
|
||||
// fin
|
||||
//fin
|
||||
if systemflags & resxhgr1
|
||||
if uword_isle(xaddr, $4000) and uword_isgt(xheap, $2000)
|
||||
xaddr = $4000
|
||||
@ -1067,9 +1070,9 @@ def adddef(isfirst, addr, deflast)#1
|
||||
if not isfirst
|
||||
preventry = defentry - t_defentry
|
||||
defsize = addr - preventry=>bytecodeaddr
|
||||
if *jitcomp and defsize < 256
|
||||
if *jitcomp and defsize <= jitsize
|
||||
preventry=>interpaddr = $03D6 // JSR $03D6 (JIT INTERP)
|
||||
preventry->callcount = jitcount // Set count
|
||||
preventry->callcount = jitcount // Set JIT countdown
|
||||
preventry->bytecodesize = defsize // Set size
|
||||
fin
|
||||
fin
|
||||
@ -1186,9 +1189,13 @@ def loadmod(mod)#1
|
||||
codefix = defaddr - bytecode
|
||||
defofst = defaddr - defofst
|
||||
//
|
||||
// Reser JIT warmup count
|
||||
//
|
||||
*jitwarming = jitwarmup
|
||||
//
|
||||
// Run through the DeFinition Dictionary.
|
||||
//
|
||||
deffirst = 1
|
||||
deffirst = 1
|
||||
while ^rld == $02
|
||||
//
|
||||
// This is a bytcode def entry - add it to the def directory.
|
||||
|
@ -53,6 +53,8 @@ OPPAGE = OPIDX+1
|
||||
STRBUF = $0280
|
||||
INTERP = $03D0
|
||||
JITCOMP = $03E2
|
||||
JITCODE = $03E4
|
||||
JITWARM = $03E6
|
||||
;******************************
|
||||
;* *
|
||||
;* INTERPRETER INITIALIZATION *
|
||||
@ -439,13 +441,21 @@ JITINTRPX PHP
|
||||
PLA
|
||||
SBC #$00
|
||||
STA TMPH
|
||||
LDY #$05 ; DEC JIT COUNT
|
||||
LDA (TMP),Y
|
||||
LDY #$05
|
||||
LDA JITWARM+1 ; CHECK WARMING
|
||||
ORA JITWARM
|
||||
BEQ ++
|
||||
LDA JITWARM
|
||||
BNE +
|
||||
DEC JITWARM+1
|
||||
+ DEC JITWARM
|
||||
JMP +++
|
||||
++ LDA (TMP),Y ; DEC JIT COUNT
|
||||
SEC
|
||||
SBC #$01
|
||||
STA (TMP),Y
|
||||
BEQ RUNJIT
|
||||
DEY
|
||||
+++ DEY
|
||||
- LDA (TMP),Y
|
||||
STA IPH
|
||||
DEY
|
||||
|
Loading…
x
Reference in New Issue
Block a user