agsoptimize: add macro passes
commit92e3e756db97d1468b06d32e5c1d0a4e3d722b9b
authorrofl0r <rofl0r@users.noreply.github.com>
Sat, 20 Jul 2019 00:28:59 +0000 (20 01:28 +0100)
committerrofl0r <rofl0r@users.noreply.github.com>
Sat, 20 Jul 2019 00:28:59 +0000 (20 01:28 +0100)
tree86592af28762583e91ac86604a1ce97d08c08cbb
parent2d92cb66ddf6fccc099262d0029466895353261a
agsoptimize: add macro passes

these can be used to replace snippets with cpp macros.

 #define VAR_EQ(VAR, VAL) \
li mar, VAR \
memread4 ax \
subi ax, VAL \
not ax

 #define VAR_NE(VAR, VAL) \
li mar, VAR \
memread4 ax \
subi ax, VAL

 #define INC_VAR(VAR, VAL) \
li mar, VAR \
memread4 ax \
addi ax, VAL \
memwrite4 ax

 #define SET_VAR(VAR, VAL) \
li ax, VAL \
li mar, VAR \
memwrite4 ax \

 #define FARCALL0(FUN) \
setfuncargs 0 \
li ax, FUN \
farcall ax \

 #define FARCALL1(FUN, VAL) \
li ax, VAL \
farpush ax \
setfuncargs 1 \
li ax, FUN \
farcall ax \
farsubsp 1 \

 #define OBJCALL0(FN, OBJ) \
li mar, OBJ \
mr ax, mar \
push op \
callobj ax \
setfuncargs 0 \
li ax, FN \
farcall ax \
pop op \

 #define OBJCALL1(FN, OBJ, ARG) \
li bx, ARG \
li mar, OBJ \
mr ax, mar \
push op \
callobj ax \
farpush bx \
setfuncargs 1 \
li ax, FN \
farcall ax \
farsubsp 1 \
pop op

 #define OBJCALL1_DYNSTR(FN, OBJ, ARG) \
li ax, ARG \
newstr ax \
mr bx, ax \
li mar, OBJ \
mr ax, mar \
push op \
callobj ax \
farpush bx \
setfuncargs 1 \
li ax, FN \
farcall ax \
farsubsp 1 \
pop op \
agsoptimize