180 lines
4.5 KiB
Go
180 lines
4.5 KiB
Go
|
package sbf
|
||
|
|
||
|
// Op classes
|
||
|
const (
|
||
|
ClassLd = uint8(iota)
|
||
|
ClassLdx
|
||
|
ClassSt
|
||
|
ClassStx
|
||
|
ClassAlu
|
||
|
ClassJmp
|
||
|
Class0x06 // reserved
|
||
|
ClassAlu64
|
||
|
)
|
||
|
|
||
|
// Size modes
|
||
|
const (
|
||
|
SizeW = uint8(iota * 0x08)
|
||
|
SizeH
|
||
|
SizeB
|
||
|
SizeDw
|
||
|
)
|
||
|
|
||
|
// Addressing modes
|
||
|
const (
|
||
|
AddrImm = uint8(iota * 0x20)
|
||
|
AddrAbs
|
||
|
AddrInd
|
||
|
AddrMem
|
||
|
Addr0x80 // reserved
|
||
|
Addr0xa0 // reserved
|
||
|
AddrXadd
|
||
|
)
|
||
|
|
||
|
// Source modes
|
||
|
const (
|
||
|
SrcK = uint8(iota * 0x08)
|
||
|
SrcX
|
||
|
)
|
||
|
|
||
|
// ALU operations
|
||
|
const (
|
||
|
AluAdd = uint8(iota * 0x10)
|
||
|
AluSub
|
||
|
AluMul
|
||
|
AluDiv
|
||
|
AluOr
|
||
|
AluAnd
|
||
|
AluLsh
|
||
|
AluRsh
|
||
|
AluNeg
|
||
|
AluMod
|
||
|
AluXor
|
||
|
AluMov
|
||
|
AluArsh
|
||
|
AluEnd
|
||
|
AluSdiv
|
||
|
)
|
||
|
|
||
|
// Jump operations
|
||
|
const (
|
||
|
JumpAlways = uint8(iota * 0x10)
|
||
|
JumpEq
|
||
|
JumpGt
|
||
|
JumpGe
|
||
|
JumpSet
|
||
|
JumpNe
|
||
|
JumpSgt
|
||
|
JumpSge
|
||
|
JumpCall
|
||
|
JumpExit
|
||
|
JumpLt
|
||
|
JumpLe
|
||
|
JumpSlt
|
||
|
JumpSle
|
||
|
)
|
||
|
|
||
|
// Opcodes
|
||
|
const (
|
||
|
OpLddw = ClassLd | AddrImm | SizeDw
|
||
|
|
||
|
OpLdxb = ClassLdx | AddrMem | SizeB
|
||
|
OpLdxh = ClassLdx | AddrMem | SizeH
|
||
|
OpLdxw = ClassLdx | AddrMem | SizeW
|
||
|
OpLdxdw = ClassLdx | AddrMem | SizeDw
|
||
|
OpStb = ClassSt | AddrMem | SizeB
|
||
|
OpSth = ClassSt | AddrMem | SizeH
|
||
|
OpStw = ClassSt | AddrMem | SizeW
|
||
|
OpStdw = ClassSt | AddrMem | SizeDw
|
||
|
OpStxb = ClassStx | AddrMem | SizeB
|
||
|
OpStxh = ClassStx | AddrMem | SizeH
|
||
|
OpStxw = ClassStx | AddrMem | SizeW
|
||
|
OpStxdw = ClassStx | AddrMem | SizeDw
|
||
|
|
||
|
OpAdd32Imm = ClassAlu | SrcK | AluAdd
|
||
|
OpAdd32Reg = ClassAlu | SrcX | AluAdd
|
||
|
OpSub32Imm = ClassAlu | SrcK | AluSub
|
||
|
OpSub32Reg = ClassAlu | SrcX | AluSub
|
||
|
OpMul32Imm = ClassAlu | SrcK | AluMul
|
||
|
OpMul32Reg = ClassAlu | SrcX | AluMul
|
||
|
OpDiv32Imm = ClassAlu | SrcK | AluDiv
|
||
|
OpDiv32Reg = ClassAlu | SrcX | AluDiv
|
||
|
OpOr32Imm = ClassAlu | SrcK | AluOr
|
||
|
OpOr32Reg = ClassAlu | SrcX | AluOr
|
||
|
OpAnd32Imm = ClassAlu | SrcK | AluAnd
|
||
|
OpAnd32Reg = ClassAlu | SrcX | AluAnd
|
||
|
OpLsh32Imm = ClassAlu | SrcK | AluLsh
|
||
|
OpLsh32Reg = ClassAlu | SrcX | AluLsh
|
||
|
OpRsh32Imm = ClassAlu | SrcK | AluRsh
|
||
|
OpRsh32Reg = ClassAlu | SrcX | AluRsh
|
||
|
OpNeg32 = ClassAlu | AluNeg
|
||
|
OpMod32Imm = ClassAlu | SrcK | AluMod
|
||
|
OpMod32Reg = ClassAlu | SrcX | AluMod
|
||
|
OpXor32Imm = ClassAlu | SrcK | AluXor
|
||
|
OpXor32Reg = ClassAlu | SrcX | AluXor
|
||
|
OpMov32Imm = ClassAlu | SrcK | AluMov
|
||
|
OpMov32Reg = ClassAlu | SrcX | AluMov
|
||
|
OpArsh32Imm = ClassAlu | SrcK | AluArsh
|
||
|
OpArsh32Reg = ClassAlu | SrcX | AluArsh
|
||
|
OpSdiv32Imm = ClassAlu | SrcK | AluSdiv
|
||
|
OpSdiv32Reg = ClassAlu | SrcX | AluSdiv
|
||
|
OpLe = ClassAlu | SrcK | AluEnd
|
||
|
OpBe = ClassAlu | SrcX | AluEnd
|
||
|
|
||
|
OpAdd64Imm = ClassAlu64 | SrcK | AluAdd
|
||
|
OpAdd64Reg = ClassAlu64 | SrcX | AluAdd
|
||
|
OpSub64Imm = ClassAlu64 | SrcK | AluSub
|
||
|
OpSub64Reg = ClassAlu64 | SrcX | AluSub
|
||
|
OpMul64Imm = ClassAlu64 | SrcK | AluMul
|
||
|
OpMul64Reg = ClassAlu64 | SrcX | AluMul
|
||
|
OpDiv64Imm = ClassAlu64 | SrcK | AluDiv
|
||
|
OpDiv64Reg = ClassAlu64 | SrcX | AluDiv
|
||
|
OpOr64Imm = ClassAlu64 | SrcK | AluOr
|
||
|
OpOr64Reg = ClassAlu64 | SrcX | AluOr
|
||
|
OpAnd64Imm = ClassAlu64 | SrcK | AluAnd
|
||
|
OpAnd64Reg = ClassAlu64 | SrcX | AluAnd
|
||
|
OpLsh64Imm = ClassAlu64 | SrcK | AluLsh
|
||
|
OpLsh64Reg = ClassAlu64 | SrcX | AluLsh
|
||
|
OpRsh64Imm = ClassAlu64 | SrcK | AluRsh
|
||
|
OpRsh64Reg = ClassAlu64 | SrcX | AluRsh
|
||
|
OpNeg64 = ClassAlu64 | AluNeg
|
||
|
OpMod64Imm = ClassAlu64 | SrcK | AluMod
|
||
|
OpMod64Reg = ClassAlu64 | SrcX | AluMod
|
||
|
OpXor64Imm = ClassAlu64 | SrcK | AluXor
|
||
|
OpXor64Reg = ClassAlu64 | SrcX | AluXor
|
||
|
OpMov64Imm = ClassAlu64 | SrcK | AluMov
|
||
|
OpMov64Reg = ClassAlu64 | SrcX | AluMov
|
||
|
OpArsh64Imm = ClassAlu64 | SrcK | AluArsh
|
||
|
OpArsh64Reg = ClassAlu64 | SrcX | AluArsh
|
||
|
OpSdiv64Imm = ClassAlu64 | SrcK | AluSdiv
|
||
|
OpSdiv64Reg = ClassAlu64 | SrcX | AluSdiv
|
||
|
|
||
|
OpJa = ClassJmp | JumpAlways
|
||
|
OpJeqImm = ClassJmp | SrcK | JumpEq
|
||
|
OpJeqReg = ClassJmp | SrcX | JumpEq
|
||
|
OpJgtImm = ClassJmp | SrcK | JumpGt
|
||
|
OpJgtReg = ClassJmp | SrcX | JumpGt
|
||
|
OpJgeImm = ClassJmp | SrcK | JumpGe
|
||
|
OpJgeReg = ClassJmp | SrcX | JumpGe
|
||
|
OpJltImm = ClassJmp | SrcK | JumpLt
|
||
|
OpJltReg = ClassJmp | SrcX | JumpLt
|
||
|
OpJleImm = ClassJmp | SrcK | JumpLe
|
||
|
OpJleReg = ClassJmp | SrcX | JumpLe
|
||
|
OpJsetImm = ClassJmp | SrcK | JumpSet
|
||
|
OpJsetReg = ClassJmp | SrcX | JumpSet
|
||
|
OpJneImm = ClassJmp | SrcK | JumpNe
|
||
|
OpJneReg = ClassJmp | SrcX | JumpNe
|
||
|
OpJsgtImm = ClassJmp | SrcK | JumpSgt
|
||
|
OpJsgtReg = ClassJmp | SrcX | JumpSgt
|
||
|
OpJsgeImm = ClassJmp | SrcK | JumpSge
|
||
|
OpJsgeReg = ClassJmp | SrcX | JumpSge
|
||
|
OpJsltImm = ClassJmp | SrcK | JumpSlt
|
||
|
OpJsltReg = ClassJmp | SrcX | JumpSlt
|
||
|
OpJsleImm = ClassJmp | SrcK | JumpSle
|
||
|
OpJsleReg = ClassJmp | SrcX | JumpSle
|
||
|
|
||
|
OpCall = ClassJmp | SrcK | JumpCall
|
||
|
OpCallx = ClassJmp | SrcX | JumpCall
|
||
|
OpExit = ClassJmp | JumpExit
|
||
|
)
|