61349389fb
fix for this). Hack in crude support for mismatched stack pushes and pops (ints vs longs).
121 lines
1.9 KiB
Plaintext
121 lines
1.9 KiB
Plaintext
# Types:
|
|
#
|
|
# I, F, L, D: int, float, long, double
|
|
# i, F: int, float; promoted to long, double based on size
|
|
# .: ignore this parameter
|
|
# ?: pull/push types from other ? parameters
|
|
|
|
# Simple terminals
|
|
S ?=.. CONST
|
|
V ?=.. REG
|
|
S ?=?. NOP
|
|
S I=.. LABEL
|
|
S I=.. BLOCK
|
|
V ?=.. PAIR
|
|
S ?=.. ANY
|
|
S ?=.. LOCAL
|
|
V ?=.. PHI
|
|
|
|
# Magic stack operations
|
|
S ?=?. PUSH
|
|
S ?=.. POP
|
|
|
|
# Memory operations
|
|
S ?=I. LOAD
|
|
S I=I. LOADB
|
|
S I=I. LOADH
|
|
S ?=I? STORE
|
|
S ?=I? STOREB
|
|
S ?=I? STOREH
|
|
|
|
# Arithemetic operations
|
|
S i=ii ADD
|
|
S i=ii SUB
|
|
S i=ii MUL
|
|
S i=ii DIV
|
|
S i=ii DIVU
|
|
S i=ii MOD
|
|
S i=ii MODU
|
|
S i=ii NEG
|
|
|
|
S f=ff ADDF
|
|
S f=ff SUBF
|
|
S f=ff MULF
|
|
S f=ff DIVF
|
|
S f=ff NEGF
|
|
|
|
S i=ii AND
|
|
S i=ii OR
|
|
S i=ii EOR
|
|
S i=ii NOT
|
|
S i=ii ASL
|
|
S i=ii ASR
|
|
S i=ii LSL
|
|
S i=ii LSR
|
|
|
|
# Bitwise conversions
|
|
# (Remember, these don't change the value, merely move it)
|
|
# (order is important here; the 8-byte version of each must immediate succeed
|
|
# the 4-byte version)
|
|
S F=I. COPYI
|
|
S I=F. COPYF
|
|
S D=L. COPYL
|
|
S L=D. COPYD
|
|
|
|
# Semantic conversions
|
|
# (order is important here; the 8-byte version of each must immediate succeed
|
|
# the 4-byte version)
|
|
S ?=I. FROMUI
|
|
S ?=L. FROMUL
|
|
S ?=I. FROMSI
|
|
S ?=L. FROMSL
|
|
S ?=F. FROMF
|
|
S ?=D. FROMD
|
|
S L=II FROMIPAIR
|
|
S I=L. FROML0
|
|
S I=L. FROML1
|
|
|
|
# The H versions are only used if wordsize > 2
|
|
S I=I. EXTENDB
|
|
S I=I. EXTENDH
|
|
S I=I. TRUNCATEB
|
|
S I=I. TRUNCATEH
|
|
|
|
# Tristate comparisons
|
|
# (order is important here; the 8-byte version of each must immediate succeed
|
|
# the 4-byte version)
|
|
S I=II COMPARESI
|
|
S I=LL COMPARESL
|
|
S I=II COMPAREUI
|
|
S I=LL COMPAREUL
|
|
S I=FF COMPAREF
|
|
S I=DD COMPARED
|
|
|
|
# Tristate to boolean conversion
|
|
S I=I. IFEQ
|
|
S I=I. IFLT
|
|
S I=I. IFLE
|
|
|
|
# Procedures
|
|
S i=I. CALL
|
|
S i=?. GETRET
|
|
S ?=i. SETRET
|
|
|
|
# Flow control --- these never return
|
|
V .=i. JUMP
|
|
V .=i. CJUMPEQ
|
|
V .=i. CJUMPLT
|
|
V .=i. CJUMPLE
|
|
V .=.. RET
|
|
|
|
# Special
|
|
S ?=i. STACKADJUST
|
|
S i=.. GETFP
|
|
S ?=i. SETFP
|
|
S i=.. GETSP
|
|
S ?=i. SETSP
|
|
S i=i. CHAINFP
|
|
S i=i. FPTOAB
|
|
S i=i. FPTOLB
|
|
|