mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-04-07 16:41:59 +00:00
disable optimizer on 64K machines
This commit is contained in:
parent
85e76a74bb
commit
0af73ad1ca
@ -119,10 +119,10 @@ export def main(range)#0
|
||||
putc('?')
|
||||
wend
|
||||
putln
|
||||
//printfunc(1, 2, &(a,b) a+b)
|
||||
//printfunc(1, 2, &(a,b) (a-b))
|
||||
//lambda = &(x,y) x * y
|
||||
//puti(lambda(2,3));putln
|
||||
printfunc(1, 2, &(a,b) a+b)
|
||||
printfunc(1, 2, &(a,b) (a-b))
|
||||
lambda = &(x,y) x * y
|
||||
puti(lambda(2,3));putln
|
||||
a = vals123
|
||||
drop, b, drop = vals123
|
||||
drop, drop, c = vals123
|
||||
|
@ -28,7 +28,7 @@
|
||||
//
|
||||
def new_tag(type)
|
||||
tag_cnt++
|
||||
if tag_cnt >= TAGNUM; exit_err(ERR_OVER|ERR_CODE|ERR_TABLE); fin
|
||||
if tag_cnt >= tag_num; exit_err(ERR_OVER|ERR_CODE|ERR_TABLE); fin
|
||||
tag_addr=>[tag_cnt] = 0 // Unresolved, nothing to update yet
|
||||
tag_type->[tag_cnt] = type
|
||||
return tag_cnt
|
||||
@ -101,7 +101,7 @@ def emit_addr(tag, offset)#0
|
||||
fixup_tag=>[fixup_cnt] = tag
|
||||
fixup_addr=>[fixup_cnt] = codeptr
|
||||
fixup_cnt++
|
||||
if fixup_cnt >= FIXUPNUM; exit_err(ERR_OVER|ERR_ID|ERR_TABLE); fin
|
||||
if fixup_cnt >= fixup_num; exit_err(ERR_OVER|ERR_ID|ERR_TABLE); fin
|
||||
emit_word(offset + tag_addr=>[tag])
|
||||
end
|
||||
def emit_reladdr(tag)#0
|
||||
@ -434,7 +434,7 @@ def lookup_idglobal(nameptr, len)
|
||||
fin
|
||||
return idptr
|
||||
end
|
||||
def add_iddata(namestr, len, type, size)#0
|
||||
def new_iddata(namestr, len, type, size)#0
|
||||
if idmatch(namestr, len, idglobal_tbl, globals); exit_err(ERR_DUP|ERR_ID); fin
|
||||
nametostr(namestr, len, lastglobal + idname)
|
||||
lastglobal=>idtype = type
|
||||
@ -450,7 +450,7 @@ def add_iddata(namestr, len, type, size)#0
|
||||
fin
|
||||
globals++
|
||||
lastglobal = lastglobal + t_id + len
|
||||
if lastglobal - idglobal_tbl > IDGLOBALSZ; exit_err(ERR_OVER|ERR_GLOBAL|ERR_ID|ERR_TABLE); fin
|
||||
if lastglobal - idglobal_tbl > globalbufsz; exit_err(ERR_OVER|ERR_GLOBAL|ERR_ID|ERR_TABLE); fin
|
||||
end
|
||||
def size_iddata(type, varsize, initsize)#0
|
||||
if varsize > initsize
|
||||
@ -460,7 +460,7 @@ def size_iddata(type, varsize, initsize)#0
|
||||
datasize = datasize + initsize
|
||||
fin
|
||||
end
|
||||
def add_idglobal(namestr, len, type, value, cparms, cvals)#0
|
||||
def new_idglobal(namestr, len, type, value, cparms, cvals)#0
|
||||
if idmatch(namestr, len, idglobal_tbl, globals); exit_err(ERR_DUP|ERR_ID); fin
|
||||
lastglobal=>idval = value
|
||||
lastglobal=>idtype = type
|
||||
@ -469,13 +469,13 @@ def add_idglobal(namestr, len, type, value, cparms, cvals)#0
|
||||
nametostr(namestr, len, lastglobal + idname)
|
||||
globals++
|
||||
lastglobal = lastglobal + t_id + len
|
||||
if lastglobal - idglobal_tbl > IDGLOBALSZ; exit_err(ERR_OVER|ERR_GLOBAL|ERR_ID|ERR_TABLE); fin
|
||||
if lastglobal - idglobal_tbl > globalbufsz; exit_err(ERR_OVER|ERR_GLOBAL|ERR_ID|ERR_TABLE); fin
|
||||
end
|
||||
def add_idconst(namestr, len, value)#0
|
||||
add_idglobal(namestr, len, CONST_TYPE, value, 0, 0)
|
||||
def new_idconst(namestr, len, value)#0
|
||||
new_idglobal(namestr, len, CONST_TYPE, value, 0, 0)
|
||||
end
|
||||
def add_idfunc(namestr, len, type, tag, cfnparms, cfnvals)#0
|
||||
add_idglobal(namestr, len, type|FUNC_TYPE, tag, cfnparms, cfnvals)
|
||||
def new_idfunc(namestr, len, type, tag, cfnparms, cfnvals)#0
|
||||
new_idglobal(namestr, len, type|FUNC_TYPE, tag, cfnparms, cfnvals)
|
||||
end
|
||||
def set_idfunc(namestr, len, tag, cparms, cvals)#0
|
||||
word idptr
|
||||
@ -494,19 +494,24 @@ def init_idglobal#0
|
||||
word op
|
||||
byte i
|
||||
|
||||
puts("Mem free: "); puth(heapavail); putln
|
||||
tag_addr = heapalloc(TAGNUM*2)
|
||||
tag_type = heapalloc(TAGNUM)
|
||||
puts("Mem free after tag allocate: "); puth(heapavail); putln
|
||||
fixup_tag = heapalloc(FIXUPNUM*2)
|
||||
fixup_addr = heapalloc(FIXUPNUM*2)
|
||||
puts("Mem free after fixup allocate: "); puth(heapavail); putln
|
||||
idglobal_tbl = heapalloc(IDGLOBALSZ)
|
||||
idlocal_tbl = heapalloc(IDLOCALSZ)
|
||||
puts("Mem free after global allocate: "); puth(heapavail); putln
|
||||
tag_num = TAGNUM
|
||||
fixup_num = FIXUPNUM
|
||||
globalbufsz = IDGLOBALSZ
|
||||
localbufsz = IDLOCALSZ
|
||||
if isult(heapavail, $4000)
|
||||
tag_num = TAGNUM/2
|
||||
fixup_num = FIXUPNUM/2
|
||||
globalbufsz = IDGLOBALSZ/2
|
||||
localbufsz = IDLOCALSZ/2
|
||||
fin
|
||||
tag_addr = heapalloc(tag_num*2)
|
||||
tag_type = heapalloc(tag_num)
|
||||
fixup_tag = heapalloc(fixup_num*2)
|
||||
fixup_addr = heapalloc(fixup_num*2)
|
||||
idglobal_tbl = heapalloc(globalbufsz)
|
||||
idlocal_tbl = heapalloc(localbufsz)
|
||||
codebufsz = heapavail - 4096
|
||||
codebuff = heapalloc(codebufsz)
|
||||
puts("Mem free after data+code allocate: "); puth(heapavail); putln
|
||||
codeptr = codebuff
|
||||
lastglobal = idglobal_tbl
|
||||
puts("Data+Code buffer size = "); puti(codebufsz); putln
|
||||
@ -521,14 +526,14 @@ def init_idglobal#0
|
||||
next
|
||||
op=>opnext = NULL
|
||||
end
|
||||
def add_idlocal(namestr, len, type, size)#0
|
||||
def new_idlocal(namestr, len, type, size)#0
|
||||
if idmatch(namestr, len, @idlocal_tbl, locals); exit_err(ERR_DUP|ERR_ID); fin
|
||||
lastlocal=>idval = framesize
|
||||
lastlocal=>idtype = type | LOCAL_TYPE
|
||||
nametostr(namestr, len, lastlocal + idname)
|
||||
locals++
|
||||
lastlocal = lastlocal + t_id + len
|
||||
if lastlocal - idlocal_tbl > IDLOCALSZ; exit_err(ERR_OVER|ERR_LOCAL|ERR_TABLE); fin
|
||||
if lastlocal - idlocal_tbl > localbufsz; exit_err(ERR_OVER|ERR_LOCAL|ERR_TABLE); fin
|
||||
framesize = framesize + size
|
||||
if framesize > 255; exit_err(ERR_OVER|ERR_LOCAL|ERR_FRAME); fin
|
||||
end
|
||||
@ -553,7 +558,7 @@ end
|
||||
//
|
||||
// Module dependency list
|
||||
//
|
||||
def add_moddep(strptr, strlen)#0
|
||||
def new_moddep(strptr, strlen)#0
|
||||
if strlen > 15; strlen = 15; fin
|
||||
memcpy(@moddep_tbl[moddep_cnt*16] + 1, strptr, strlen)
|
||||
moddep_tbl[moddep_cnt*16] = strlen
|
||||
|
@ -909,7 +909,7 @@ def parse_var(type, basesize)#0
|
||||
if token == SET_TKN
|
||||
if type & (EXTERN_TYPE|LOCAL_TYPE); exit_err(ERR_INVAL|ERR_LOCAL|ERR_INIT); fin
|
||||
if idlen
|
||||
add_iddata(idptr, idlen, type, 0)
|
||||
new_iddata(idptr, idlen, type, 0)
|
||||
fin
|
||||
constval, constsize, consttype = parse_constexpr
|
||||
arraysize = emit_data(type, consttype, constval, constsize)
|
||||
@ -920,9 +920,9 @@ def parse_var(type, basesize)#0
|
||||
size_iddata(PTR_TYPE, size, arraysize)
|
||||
elsif idlen
|
||||
if infunc
|
||||
add_idlocal(idptr, idlen, type, size)
|
||||
new_idlocal(idptr, idlen, type, size)
|
||||
else
|
||||
add_iddata(idptr, idlen, type, size)
|
||||
new_iddata(idptr, idlen, type, size)
|
||||
fin
|
||||
fin
|
||||
end
|
||||
@ -967,14 +967,14 @@ def parse_struc#0
|
||||
size = size * 2
|
||||
fin
|
||||
if idlen
|
||||
add_idconst(idstr, idlen, offset)
|
||||
new_idconst(idstr, idlen, offset)
|
||||
fin
|
||||
offset = offset + size
|
||||
until token <> COMMA_TKN
|
||||
fin
|
||||
loop
|
||||
if struclen
|
||||
add_idconst(@strucid, struclen, offset)
|
||||
new_idconst(@strucid, struclen, offset)
|
||||
fin
|
||||
if token <> END_TKN; exit_err(ERR_MISS|ERR_CLOSE|ERR_STATE); fin
|
||||
scan
|
||||
@ -994,7 +994,7 @@ def parse_vars(type)
|
||||
idlen = tknlen
|
||||
if scan <> SET_TKN; exit_err(ERR_INVAL|ERR_CONST); fin
|
||||
value, size, type = parse_constexpr
|
||||
add_idconst(idptr, idlen, value)
|
||||
new_idconst(idptr, idlen, value)
|
||||
break
|
||||
is STRUC_TKN
|
||||
parse_struc
|
||||
@ -1043,7 +1043,7 @@ def parse_vars(type)
|
||||
if not parse_const(@cfnvals); exit_err(ERR_INVAL|ERR_CONST); fin
|
||||
scan
|
||||
fin
|
||||
add_idfunc(idptr, idlen, type, new_tag(type & EXTERN_TYPE ?? EXTERN_FIXUP|WORD_FIXUP :: WORD_FIXUP), cfnparms, cfnvals)
|
||||
new_idfunc(idptr, idlen, type, new_tag(type & EXTERN_TYPE ?? EXTERN_FIXUP|WORD_FIXUP :: WORD_FIXUP), cfnparms, cfnvals)
|
||||
else
|
||||
exit_err(ERR_MISS|ERR_ID)
|
||||
fin
|
||||
@ -1059,7 +1059,7 @@ end
|
||||
def parse_mods
|
||||
if token == IMPORT_TKN
|
||||
if scan <> ID_TKN; exit_err(ERR_MISS|ERR_ID); fin
|
||||
add_moddep(tknptr, tknlen)
|
||||
new_moddep(tknptr, tknlen)
|
||||
scan
|
||||
while parse_vars(EXTERN_TYPE); nextln; loop
|
||||
if token <> END_TKN; exit_err(ERR_MISS|ERR_CLOSE|ERR_STATE); fin
|
||||
@ -1081,7 +1081,7 @@ def parse_lambda
|
||||
repeat
|
||||
if scan == ID_TKN
|
||||
cfnparms++
|
||||
add_idlocal(tknptr, tknlen, WORD_TYPE, 2)
|
||||
new_idlocal(tknptr, tknlen, WORD_TYPE, 2)
|
||||
scan
|
||||
fin
|
||||
until token <> COMMA_TKN
|
||||
@ -1118,7 +1118,7 @@ def parse_lambda
|
||||
func_tag = new_tag(WORD_FIXUP)
|
||||
lambda_tag[lambda_cnt] = func_tag
|
||||
lambda_cparms[lambda_cnt] = cfnparms
|
||||
add_idfunc(@lambda_id[lambda_cnt * 4 + 1], 3, FUNC_TYPE, func_tag, cfnparms, 1)
|
||||
new_idfunc(@lambda_id[lambda_cnt * 4 + 1], 3, FUNC_TYPE, func_tag, cfnparms, 1)
|
||||
fin
|
||||
lambda_cnt++
|
||||
if lambda_cnt >= LAMBDANUM; parse_warn("Lambda function overflow"); fin
|
||||
@ -1148,7 +1148,7 @@ def parse_defs
|
||||
repeat
|
||||
if scan == ID_TKN
|
||||
cfnparms++
|
||||
add_idlocal(tknptr, tknlen, WORD_TYPE, 2)
|
||||
new_idlocal(tknptr, tknlen, WORD_TYPE, 2)
|
||||
scan
|
||||
fin
|
||||
until token <> COMMA_TKN
|
||||
@ -1167,7 +1167,7 @@ def parse_defs
|
||||
idptr=>idtype = idptr=>idtype | type
|
||||
else
|
||||
func_tag = new_tag(WORD_FIXUP)
|
||||
add_idfunc(idstr, idlen, type, func_tag, cfnparms, infuncvals)
|
||||
new_idfunc(idstr, idlen, type, func_tag, cfnparms, infuncvals)
|
||||
fin
|
||||
emit_tag(func_tag)
|
||||
while parse_vars(LOCAL_TYPE); nextln; loop
|
||||
|
@ -232,7 +232,7 @@ end
|
||||
// Generated code buffers
|
||||
//
|
||||
const OPSEQNUM = 256
|
||||
const TAGNUM = 2048
|
||||
const TAGNUM = 1024
|
||||
const FIXUPNUM = 2048
|
||||
const IDGLOBALSZ = 2048
|
||||
const IDLOCALSZ = 512
|
||||
@ -242,7 +242,8 @@ word tag_addr, tag_type
|
||||
word idglobal_tbl, idlocal_tbl
|
||||
word pending_seq
|
||||
word globals, lastglobal, lastlocal, savelast
|
||||
word codebufsz, datasize, framesize, savesize
|
||||
word tag_num, fixup_num, globalbufsz, localbufsz, codebufsz
|
||||
word datasize, framesize, savesize
|
||||
byte locals, savelocals
|
||||
word codebuff, codeptr, entrypoint
|
||||
word modsysflags
|
||||
@ -420,9 +421,12 @@ if ^arg and ^(arg + 1) == '-'
|
||||
//
|
||||
// Load optimizer module here
|
||||
//
|
||||
if modexec("CODEOPT") >= 0
|
||||
outflags = outflags | OPTIMIZE
|
||||
else
|
||||
if MACHID & $30 == $30
|
||||
if modexec("CODEOPT") >= 0
|
||||
outflags = outflags | OPTIMIZE
|
||||
fin
|
||||
fin
|
||||
if not (outflags & OPTIMIZE)
|
||||
puts("\nOptimizer disabled\n")
|
||||
fin
|
||||
opt++
|
||||
|
@ -1063,7 +1063,7 @@ def loadmod(mod)#1
|
||||
fin
|
||||
if ^rld & $10 // EXTERN reference.
|
||||
fixup = fixup + lookupextern(esd, rld->3)
|
||||
else // INTERN fixup.
|
||||
else // INTERN fixup.
|
||||
fixup = fixup + modfix - MODADDR
|
||||
if uword_isge(fixup, bytecode)
|
||||
//
|
||||
@ -1121,18 +1121,19 @@ def loadmod(mod)#1
|
||||
//
|
||||
fixup = 0 // This is repurposed for the return code
|
||||
if init
|
||||
fixup = adddef(defbank, init - defofst + defaddr, @deflast)()
|
||||
init = init - defofst + defaddr
|
||||
fixup = adddef(defbank, init, @deflast)()
|
||||
if fixup < modinitkeep
|
||||
//
|
||||
// Free init routine unless initkeep
|
||||
//
|
||||
if defbank
|
||||
xheap = init - defofst + defaddr
|
||||
xheap = init
|
||||
else
|
||||
//
|
||||
// Free up init code in main memory.
|
||||
//
|
||||
releaseheap(init - defofst + defaddr)
|
||||
releaseheap(init)
|
||||
fin
|
||||
if fixup < 0
|
||||
perr = -fixup
|
||||
|
Loading…
x
Reference in New Issue
Block a user