feat: SnowVM 支持更多指令
This commit is contained in:
parent
de6df61960
commit
fa91550ad7
@ -1,22 +1,31 @@
|
||||
package org.jcnc.snow.vm.factories;
|
||||
|
||||
import org.jcnc.snow.vm.commands.arithmetic.conversion.*;
|
||||
import org.jcnc.snow.vm.interfaces.Command;
|
||||
import org.jcnc.snow.vm.commands.arithmetic.byte8.*;
|
||||
import org.jcnc.snow.vm.commands.arithmetic.conversion.*;
|
||||
import org.jcnc.snow.vm.commands.arithmetic.double64.*;
|
||||
import org.jcnc.snow.vm.commands.arithmetic.float32.*;
|
||||
import org.jcnc.snow.vm.commands.arithmetic.int32.*;
|
||||
import org.jcnc.snow.vm.commands.arithmetic.long64.*;
|
||||
import org.jcnc.snow.vm.commands.arithmetic.short16.*;
|
||||
import org.jcnc.snow.vm.commands.bitwise.byte8.BAndCommand;
|
||||
import org.jcnc.snow.vm.commands.bitwise.byte8.BOrCommand;
|
||||
import org.jcnc.snow.vm.commands.bitwise.byte8.BXorCommand;
|
||||
import org.jcnc.snow.vm.commands.bitwise.int32.IAndCommand;
|
||||
import org.jcnc.snow.vm.commands.bitwise.int32.IOrCommand;
|
||||
import org.jcnc.snow.vm.commands.bitwise.int32.IXorCommand;
|
||||
import org.jcnc.snow.vm.commands.bitwise.long64.LAndCommand;
|
||||
import org.jcnc.snow.vm.commands.bitwise.long64.LOrCommand;
|
||||
import org.jcnc.snow.vm.commands.bitwise.long64.LXorCommand;
|
||||
import org.jcnc.snow.vm.commands.bitwise.short16.SAndCommand;
|
||||
import org.jcnc.snow.vm.commands.bitwise.short16.SOrCommand;
|
||||
import org.jcnc.snow.vm.commands.bitwise.short16.SXorCommand;
|
||||
import org.jcnc.snow.vm.commands.control.all.JumpCommand;
|
||||
import org.jcnc.snow.vm.commands.control.byte8.*;
|
||||
import org.jcnc.snow.vm.commands.control.double64.*;
|
||||
import org.jcnc.snow.vm.commands.control.float32.*;
|
||||
import org.jcnc.snow.vm.commands.control.int32.*;
|
||||
import org.jcnc.snow.vm.commands.control.long64.*;
|
||||
import org.jcnc.snow.vm.commands.control.short16.*;
|
||||
import org.jcnc.snow.vm.commands.function.CallCommand;
|
||||
import org.jcnc.snow.vm.commands.function.RetCommand;
|
||||
import org.jcnc.snow.vm.commands.memory.all.MovCommand;
|
||||
@ -43,6 +52,7 @@ import org.jcnc.snow.vm.commands.stack.long64.LPushCommand;
|
||||
import org.jcnc.snow.vm.commands.stack.short16.SPushCommand;
|
||||
import org.jcnc.snow.vm.commands.vm.HaltCommand;
|
||||
import org.jcnc.snow.vm.engine.VMOpCode;
|
||||
import org.jcnc.snow.vm.interfaces.Command;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
@ -52,160 +62,211 @@ import java.util.Optional;
|
||||
* <p>This class uses an array for fast, constant-time access to corresponding command instances.</p>
|
||||
*/
|
||||
public class CommandFactory {
|
||||
private static final Command[] COMMANDS = new Command[0x04FF];
|
||||
/** Complete command table. 0x0000 – 0x04FF (inclusive). */
|
||||
private static final Command[] COMMANDS = new Command[0x0500];
|
||||
|
||||
static {
|
||||
// Initialize the array with corresponding commands based on opCode values
|
||||
|
||||
// 1 Arithmetic Operations (1–80)
|
||||
// 1.1 int32 (1-10)
|
||||
COMMANDS[VMOpCode.I_ADD] = new IAddCommand(); // 1
|
||||
COMMANDS[VMOpCode.I_SUB] = new ISubCommand(); // 2
|
||||
COMMANDS[VMOpCode.I_MUL] = new IMulCommand(); // 3
|
||||
COMMANDS[VMOpCode.I_DIV] = new IDivCommand(); // 4
|
||||
COMMANDS[VMOpCode.I_MOD] = new IModCommand(); // 5
|
||||
COMMANDS[VMOpCode.I_INC] = new IIncCommand(); // 6
|
||||
COMMANDS[VMOpCode.I_NEG] = new INegCommand(); // 7
|
||||
// 1.2 long64 (11-20)
|
||||
COMMANDS[VMOpCode.L_ADD] = new LAddCommand(); // 11
|
||||
COMMANDS[VMOpCode.L_SUB] = new LSubCommand(); // 12
|
||||
COMMANDS[VMOpCode.L_MUL] = new LMulCommand(); // 13
|
||||
COMMANDS[VMOpCode.L_DIV] = new LDivCommand(); // 14
|
||||
COMMANDS[VMOpCode.L_MOD] = new LModCommand(); // 15
|
||||
COMMANDS[VMOpCode.L_INC] = new LIncCommand(); // 16
|
||||
COMMANDS[VMOpCode.L_NEG] = new LNegCommand(); // 17
|
||||
// 1.3 short16 (21-30)
|
||||
COMMANDS[VMOpCode.S_ADD] = new SAddCommand(); // 21
|
||||
COMMANDS[VMOpCode.S_SUB] = new SSubCommand(); // 22
|
||||
COMMANDS[VMOpCode.S_MUL] = new SMulCommand(); // 23
|
||||
COMMANDS[VMOpCode.S_DIV] = new SDivCommand(); // 24
|
||||
COMMANDS[VMOpCode.S_MOD] = new SModCommand(); // 25
|
||||
COMMANDS[VMOpCode.S_INC] = new SIncCommand(); // 26
|
||||
COMMANDS[VMOpCode.S_NEG] = new SNegCommand(); // 27
|
||||
// 1.4 byte8 (31-40)
|
||||
COMMANDS[VMOpCode.B_ADD] = new BAddCommand(); // 31
|
||||
COMMANDS[VMOpCode.B_SUB] = new BSubCommand(); // 32
|
||||
COMMANDS[VMOpCode.B_MUL] = new BMulCommand(); // 33
|
||||
COMMANDS[VMOpCode.B_DIV] = new BDivCommand(); // 34
|
||||
COMMANDS[VMOpCode.B_MOD] = new BModCommand(); // 35
|
||||
COMMANDS[VMOpCode.B_INC] = new BIncCommand(); // 36
|
||||
COMMANDS[VMOpCode.B_NEG] = new BNegCommand(); // 37
|
||||
// 1.5 double64 (41-50)
|
||||
COMMANDS[VMOpCode.D_ADD] = new DAddCommand(); // 41
|
||||
COMMANDS[VMOpCode.D_SUB] = new DSubCommand(); // 42
|
||||
COMMANDS[VMOpCode.D_MUL] = new DMulCommand(); // 43
|
||||
COMMANDS[VMOpCode.D_DIV] = new DDivCommand(); // 44
|
||||
COMMANDS[VMOpCode.D_MOD] = new DModCommand(); // 45
|
||||
COMMANDS[VMOpCode.D_INC] = new DIncCommand(); // 46
|
||||
COMMANDS[VMOpCode.D_NEG] = new DNegCommand(); // 47
|
||||
// 1.6 float32 (51-60)
|
||||
COMMANDS[VMOpCode.F_ADD] = new FAddCommand(); // 51
|
||||
COMMANDS[VMOpCode.F_SUB] = new FSubCommand(); // 52
|
||||
COMMANDS[VMOpCode.F_MUL] = new FMulCommand(); // 53
|
||||
COMMANDS[VMOpCode.F_DIV] = new FDivCommand(); // 54
|
||||
COMMANDS[VMOpCode.F_MOD] = new FModCommand(); // 55
|
||||
COMMANDS[VMOpCode.F_INC] = new FIncCommand(); // 56
|
||||
COMMANDS[VMOpCode.F_NEG] = new FNegCommand(); // 57
|
||||
/* =====================================================
|
||||
* 0x0000 – 0x001F BYTE (8-bit signed)
|
||||
* ===================================================== */
|
||||
COMMANDS[VMOpCode.B_ADD] = new BAddCommand();
|
||||
COMMANDS[VMOpCode.B_SUB] = new BSubCommand();
|
||||
COMMANDS[VMOpCode.B_MUL] = new BMulCommand();
|
||||
COMMANDS[VMOpCode.B_DIV] = new BDivCommand();
|
||||
COMMANDS[VMOpCode.B_MOD] = new BModCommand();
|
||||
COMMANDS[VMOpCode.B_NEG] = new BNegCommand();
|
||||
COMMANDS[VMOpCode.B_INC] = new BIncCommand();
|
||||
|
||||
// 1.7 Type Conversion (61-80)
|
||||
COMMANDS[VMOpCode.I2L] = new I2LCommand(); // 61 int -> long
|
||||
COMMANDS[VMOpCode.I2S] = new I2SCommand(); // 62 int -> short
|
||||
COMMANDS[VMOpCode.I2B] = new I2BCommand(); // 63 int -> byte
|
||||
COMMANDS[VMOpCode.I2D] = new I2DCommand(); // 64 int -> double
|
||||
COMMANDS[VMOpCode.I2F] = new I2FCommand(); // 65 int -> float
|
||||
COMMANDS[VMOpCode.B_AND] = new BAndCommand();
|
||||
COMMANDS[VMOpCode.B_OR] = new BOrCommand();
|
||||
COMMANDS[VMOpCode.B_XOR] = new BXorCommand();
|
||||
|
||||
COMMANDS[VMOpCode.L2I] = new L2ICommand(); // 66 long -> int
|
||||
COMMANDS[VMOpCode.L2D] = new L2DCommand(); // 67 long -> double
|
||||
COMMANDS[VMOpCode.L2F] = new L2FCommand(); // 68 long -> float
|
||||
COMMANDS[VMOpCode.B_PUSH] = new BPushCommand();
|
||||
COMMANDS[VMOpCode.B_LOAD] = new BLoadCommand();
|
||||
COMMANDS[VMOpCode.B_STORE] = new BStoreCommand();
|
||||
|
||||
COMMANDS[VMOpCode.F2I] = new F2ICommand(); // 69 float -> int
|
||||
COMMANDS[VMOpCode.F2L] = new F2LCommand(); // 70 float -> long
|
||||
COMMANDS[VMOpCode.F2D] = new F2DCommand(); // 71 float -> double
|
||||
COMMANDS[VMOpCode.B_CE] = new BCECommand();
|
||||
COMMANDS[VMOpCode.B_CNE] = new BCNECommand();
|
||||
COMMANDS[VMOpCode.B_CG] = new BCGCommand();
|
||||
COMMANDS[VMOpCode.B_CGE] = new BCGECommand();
|
||||
COMMANDS[VMOpCode.B_CL] = new BCLCommand();
|
||||
COMMANDS[VMOpCode.B_CLE] = new BCLECommand();
|
||||
|
||||
COMMANDS[VMOpCode.D2I] = new D2ICommand(); // 72 double -> int
|
||||
COMMANDS[VMOpCode.D2L] = new D2LCommand(); // 73 double -> long
|
||||
COMMANDS[VMOpCode.D2F] = new D2FCommand(); // 74 double -> float
|
||||
/* =====================================================
|
||||
* 0x0020 – 0x003F SHORT (16-bit signed)
|
||||
* ===================================================== */
|
||||
COMMANDS[VMOpCode.S_ADD] = new SAddCommand();
|
||||
COMMANDS[VMOpCode.S_SUB] = new SSubCommand();
|
||||
COMMANDS[VMOpCode.S_MUL] = new SMulCommand();
|
||||
COMMANDS[VMOpCode.S_DIV] = new SDivCommand();
|
||||
COMMANDS[VMOpCode.S_MOD] = new SModCommand();
|
||||
COMMANDS[VMOpCode.S_NEG] = new SNegCommand();
|
||||
COMMANDS[VMOpCode.S_INC] = new SIncCommand();
|
||||
|
||||
COMMANDS[VMOpCode.S2I] = new S2ICommand(); // 75 short -> int
|
||||
COMMANDS[VMOpCode.S_AND] = new SAndCommand();
|
||||
COMMANDS[VMOpCode.S_OR] = new SOrCommand();
|
||||
COMMANDS[VMOpCode.S_XOR] = new SXorCommand();
|
||||
|
||||
COMMANDS[VMOpCode.B2I] = new B2ICommand(); // 76 byte -> int
|
||||
COMMANDS[VMOpCode.S_PUSH] = new SPushCommand();
|
||||
COMMANDS[VMOpCode.S_LOAD] = new SLoadCommand();
|
||||
COMMANDS[VMOpCode.S_STORE] = new SStoreCommand();
|
||||
|
||||
// 1.8 Other (77-80)
|
||||
COMMANDS[VMOpCode.S_CE] = new SCECommand();
|
||||
COMMANDS[VMOpCode.S_CNE] = new SCNECommand();
|
||||
COMMANDS[VMOpCode.S_CG] = new SCGCommand();
|
||||
COMMANDS[VMOpCode.S_CGE] = new SCGECommand();
|
||||
COMMANDS[VMOpCode.S_CL] = new SCLCommand();
|
||||
COMMANDS[VMOpCode.S_CLE] = new SCLECommand();
|
||||
|
||||
// 2. Bitwise Operations (81–90)
|
||||
// 2.1 int32 (81-85)
|
||||
COMMANDS[VMOpCode.I_AND] = new IAndCommand(); // 81
|
||||
COMMANDS[VMOpCode.I_OR] = new IOrCommand(); // 82
|
||||
COMMANDS[VMOpCode.I_XOR] = new IXorCommand(); // 83
|
||||
// 2.2 Long64 (86-90)
|
||||
COMMANDS[VMOpCode.L_AND] = new LAndCommand(); // 86
|
||||
COMMANDS[VMOpCode.L_OR] = new LOrCommand(); // 87
|
||||
COMMANDS[VMOpCode.L_XOR] = new LXorCommand(); // 88
|
||||
/* =====================================================
|
||||
* 0x0040 – 0x005F INT (32-bit signed)
|
||||
* ===================================================== */
|
||||
COMMANDS[VMOpCode.I_ADD] = new IAddCommand();
|
||||
COMMANDS[VMOpCode.I_SUB] = new ISubCommand();
|
||||
COMMANDS[VMOpCode.I_MUL] = new IMulCommand();
|
||||
COMMANDS[VMOpCode.I_DIV] = new IDivCommand();
|
||||
COMMANDS[VMOpCode.I_MOD] = new IModCommand();
|
||||
COMMANDS[VMOpCode.I_NEG] = new INegCommand();
|
||||
COMMANDS[VMOpCode.I_INC] = new IIncCommand();
|
||||
|
||||
// 3. Control Flow Operations (91–110)
|
||||
// 3.1 JUMP (91-91)
|
||||
COMMANDS[VMOpCode.JUMP] = new JumpCommand(); // 91
|
||||
// 3.2 int32 (92-97)
|
||||
COMMANDS[VMOpCode.I_CE] = new ICECommand(); // 92
|
||||
COMMANDS[VMOpCode.I_CNE] = new ICNECommand(); // 93
|
||||
COMMANDS[VMOpCode.I_CG] = new ICGCommand(); // 94
|
||||
COMMANDS[VMOpCode.I_CGE] = new ICGECommand(); // 95
|
||||
COMMANDS[VMOpCode.I_CL] = new ICLCommand(); // 96
|
||||
COMMANDS[VMOpCode.I_CLE] = new ICLECommand(); // 97
|
||||
// 3.3 long64 (98-103)
|
||||
COMMANDS[VMOpCode.L_CE] = new LCECommand(); // 98
|
||||
COMMANDS[VMOpCode.L_CNE] = new LCNECommand(); // 99
|
||||
COMMANDS[VMOpCode.L_CG] = new LCGCommand(); // 100
|
||||
COMMANDS[VMOpCode.L_CGE] = new LCGECommand(); // 101
|
||||
COMMANDS[VMOpCode.L_CL] = new LCLCommand(); // 102
|
||||
COMMANDS[VMOpCode.L_CLE] = new LCLECommand(); // 103
|
||||
COMMANDS[VMOpCode.I_AND] = new IAndCommand();
|
||||
COMMANDS[VMOpCode.I_OR] = new IOrCommand();
|
||||
COMMANDS[VMOpCode.I_XOR] = new IXorCommand();
|
||||
|
||||
// 4. Stack Operations (111–150)
|
||||
// 4.1 PUSH (111-120)
|
||||
COMMANDS[VMOpCode.I_PUSH] = new IPushCommand(); // 111
|
||||
COMMANDS[VMOpCode.L_PUSH] = new LPushCommand(); // 112
|
||||
COMMANDS[VMOpCode.S_PUSH] = new SPushCommand(); // 113
|
||||
COMMANDS[VMOpCode.B_PUSH] = new BPushCommand(); // 114
|
||||
COMMANDS[VMOpCode.D_PUSH] = new DPushCommand(); // 115
|
||||
COMMANDS[VMOpCode.F_PUSH] = new FPushCommand(); // 116
|
||||
// 4.2 POP (121-125)
|
||||
COMMANDS[VMOpCode.POP] = new PopCommand(); // 121
|
||||
// 4.3 DUP (126-130)
|
||||
COMMANDS[VMOpCode.DUP] = new DupCommand(); // 126
|
||||
// 4.4 SWAP (131-135)
|
||||
COMMANDS[VMOpCode.SWAP] = new SwapCommand(); // 131
|
||||
COMMANDS[VMOpCode.I_PUSH] = new IPushCommand();
|
||||
COMMANDS[VMOpCode.I_LOAD] = new ILoadCommand();
|
||||
COMMANDS[VMOpCode.I_STORE] = new IStoreCommand();
|
||||
|
||||
// 4.5 Other (136-150)
|
||||
COMMANDS[VMOpCode.I_CE] = new ICECommand();
|
||||
COMMANDS[VMOpCode.I_CNE] = new ICNECommand();
|
||||
COMMANDS[VMOpCode.I_CG] = new ICGCommand();
|
||||
COMMANDS[VMOpCode.I_CGE] = new ICGECommand();
|
||||
COMMANDS[VMOpCode.I_CL] = new ICLCommand();
|
||||
COMMANDS[VMOpCode.I_CLE] = new ICLECommand();
|
||||
|
||||
// 5. Memory Operations (151–200)
|
||||
// 5.1 STORE (151-160)
|
||||
COMMANDS[VMOpCode.I_STORE] = new IStoreCommand(); // 151
|
||||
COMMANDS[VMOpCode.L_STORE] = new LStoreCommand(); // 152
|
||||
COMMANDS[VMOpCode.S_STORE] = new SStoreCommand(); // 153
|
||||
COMMANDS[VMOpCode.B_STORE] = new BStoreCommand(); // 154
|
||||
COMMANDS[VMOpCode.D_STORE] = new DStoreCommand(); // 155
|
||||
COMMANDS[VMOpCode.F_STORE] = new FStoreCommand(); // 156
|
||||
// 5.2 LOAD (161-170)
|
||||
COMMANDS[VMOpCode.I_LOAD] = new ILoadCommand(); // 161
|
||||
COMMANDS[VMOpCode.L_LOAD] = new LLoadCommand(); // 162
|
||||
COMMANDS[VMOpCode.S_LOAD] = new SLoadCommand(); // 163
|
||||
COMMANDS[VMOpCode.B_LOAD] = new BLoadCommand(); // 164
|
||||
COMMANDS[VMOpCode.D_LOAD] = new DLoadCommand(); // 165
|
||||
COMMANDS[VMOpCode.F_LOAD] = new FLoadCommand(); // 166
|
||||
/* =====================================================
|
||||
* 0x0060 – 0x007F LONG (64-bit signed)
|
||||
* ===================================================== */
|
||||
COMMANDS[VMOpCode.L_ADD] = new LAddCommand();
|
||||
COMMANDS[VMOpCode.L_SUB] = new LSubCommand();
|
||||
COMMANDS[VMOpCode.L_MUL] = new LMulCommand();
|
||||
COMMANDS[VMOpCode.L_DIV] = new LDivCommand();
|
||||
COMMANDS[VMOpCode.L_MOD] = new LModCommand();
|
||||
COMMANDS[VMOpCode.L_NEG] = new LNegCommand();
|
||||
COMMANDS[VMOpCode.L_INC] = new LIncCommand();
|
||||
|
||||
// 5.3 MOV (171-176)
|
||||
COMMANDS[VMOpCode.MOV] = new MovCommand(); // 171
|
||||
COMMANDS[VMOpCode.L_AND] = new LAndCommand();
|
||||
COMMANDS[VMOpCode.L_OR] = new LOrCommand();
|
||||
COMMANDS[VMOpCode.L_XOR] = new LXorCommand();
|
||||
|
||||
// 5.4 Other (176-200)
|
||||
COMMANDS[VMOpCode.L_PUSH] = new LPushCommand();
|
||||
COMMANDS[VMOpCode.L_LOAD] = new LLoadCommand();
|
||||
COMMANDS[VMOpCode.L_STORE] = new LStoreCommand();
|
||||
|
||||
// 6. Function Operations (201–205)
|
||||
COMMANDS[VMOpCode.CALL] = new CallCommand(); // 201
|
||||
COMMANDS[VMOpCode.RET] = new RetCommand(); // 202
|
||||
COMMANDS[VMOpCode.L_CE] = new LCECommand();
|
||||
COMMANDS[VMOpCode.L_CNE] = new LCNECommand();
|
||||
COMMANDS[VMOpCode.L_CG] = new LCGCommand();
|
||||
COMMANDS[VMOpCode.L_CGE] = new LCGECommand();
|
||||
COMMANDS[VMOpCode.L_CL] = new LCLCommand();
|
||||
COMMANDS[VMOpCode.L_CLE] = new LCLECommand();
|
||||
|
||||
// 7. Virtual Machine Operations(241-255)
|
||||
COMMANDS[VMOpCode.HALT] = new HaltCommand(); // 255
|
||||
/* =====================================================
|
||||
* 0x0080 – 0x009F FLOAT (32-bit signed)
|
||||
* ===================================================== */
|
||||
COMMANDS[VMOpCode.F_ADD] = new FAddCommand();
|
||||
COMMANDS[VMOpCode.F_SUB] = new FSubCommand();
|
||||
COMMANDS[VMOpCode.F_MUL] = new FMulCommand();
|
||||
COMMANDS[VMOpCode.F_DIV] = new FDivCommand();
|
||||
COMMANDS[VMOpCode.F_MOD] = new FModCommand();
|
||||
COMMANDS[VMOpCode.F_NEG] = new FNegCommand();
|
||||
COMMANDS[VMOpCode.F_INC] = new FIncCommand();
|
||||
|
||||
COMMANDS[VMOpCode.F_PUSH] = new FPushCommand();
|
||||
COMMANDS[VMOpCode.F_LOAD] = new FLoadCommand();
|
||||
COMMANDS[VMOpCode.F_STORE] = new FStoreCommand();
|
||||
|
||||
COMMANDS[VMOpCode.F_CE] = new FCECommand();
|
||||
COMMANDS[VMOpCode.F_CNE] = new FCNECommand();
|
||||
COMMANDS[VMOpCode.F_CG] = new FCGCommand();
|
||||
COMMANDS[VMOpCode.F_CGE] = new FCGECommand();
|
||||
COMMANDS[VMOpCode.F_CL] = new FCLCommand();
|
||||
COMMANDS[VMOpCode.F_CLE] = new FCLECommand();
|
||||
|
||||
/* =====================================================
|
||||
* 0x00A0 – 0x00BF DOUBLE (64-bit IEEE-754)
|
||||
* ===================================================== */
|
||||
COMMANDS[VMOpCode.D_ADD] = new DAddCommand();
|
||||
COMMANDS[VMOpCode.D_SUB] = new DSubCommand();
|
||||
COMMANDS[VMOpCode.D_MUL] = new DMulCommand();
|
||||
COMMANDS[VMOpCode.D_DIV] = new DDivCommand();
|
||||
COMMANDS[VMOpCode.D_MOD] = new DModCommand();
|
||||
COMMANDS[VMOpCode.D_NEG] = new DNegCommand();
|
||||
COMMANDS[VMOpCode.D_INC] = new DIncCommand();
|
||||
|
||||
COMMANDS[VMOpCode.D_PUSH] = new DPushCommand();
|
||||
COMMANDS[VMOpCode.D_LOAD] = new DLoadCommand();
|
||||
COMMANDS[VMOpCode.D_STORE] = new DStoreCommand();
|
||||
|
||||
COMMANDS[VMOpCode.D_CE] = new DCECommand();
|
||||
COMMANDS[VMOpCode.D_CNE] = new DCNECommand();
|
||||
COMMANDS[VMOpCode.D_CG] = new DCGCommand();
|
||||
COMMANDS[VMOpCode.D_CGE] = new DCGECommand();
|
||||
COMMANDS[VMOpCode.D_CL] = new DCLCommand();
|
||||
COMMANDS[VMOpCode.D_CLE] = new DCLECommand();
|
||||
|
||||
/* =====================================================
|
||||
* 0x00C0 – 0x00DF TYPE CONVERSIONS
|
||||
* ===================================================== */
|
||||
COMMANDS[VMOpCode.I2L] = new I2LCommand();
|
||||
COMMANDS[VMOpCode.I2S] = new I2SCommand();
|
||||
COMMANDS[VMOpCode.I2B] = new I2BCommand();
|
||||
COMMANDS[VMOpCode.I2D] = new I2DCommand();
|
||||
COMMANDS[VMOpCode.I2F] = new I2FCommand();
|
||||
|
||||
COMMANDS[VMOpCode.L2I] = new L2ICommand();
|
||||
COMMANDS[VMOpCode.L2D] = new L2DCommand();
|
||||
COMMANDS[VMOpCode.L2F] = new L2FCommand();
|
||||
|
||||
COMMANDS[VMOpCode.F2I] = new F2ICommand();
|
||||
COMMANDS[VMOpCode.F2L] = new F2LCommand();
|
||||
COMMANDS[VMOpCode.F2D] = new F2DCommand();
|
||||
|
||||
COMMANDS[VMOpCode.D2I] = new D2ICommand();
|
||||
COMMANDS[VMOpCode.D2L] = new D2LCommand();
|
||||
COMMANDS[VMOpCode.D2F] = new D2FCommand();
|
||||
|
||||
COMMANDS[VMOpCode.S2I] = new S2ICommand();
|
||||
COMMANDS[VMOpCode.B2I] = new B2ICommand();
|
||||
|
||||
/* =====================================================
|
||||
* 0x0100 – 0x01FF GENERIC STACK OPS
|
||||
* ===================================================== */
|
||||
COMMANDS[VMOpCode.POP] = new PopCommand();
|
||||
COMMANDS[VMOpCode.DUP] = new DupCommand();
|
||||
COMMANDS[VMOpCode.SWAP] = new SwapCommand();
|
||||
|
||||
/* =====================================================
|
||||
* 0x0200 – 0x02FF CONTROL FLOW | FUNCTION CALLS
|
||||
* ===================================================== */
|
||||
COMMANDS[VMOpCode.JUMP] = new JumpCommand();
|
||||
COMMANDS[VMOpCode.CALL] = new CallCommand();
|
||||
COMMANDS[VMOpCode.RET] = new RetCommand();
|
||||
|
||||
/* =====================================================
|
||||
* 0x0300 – 0x03FF MEMORY / REGISTER MOVE
|
||||
* ===================================================== */
|
||||
COMMANDS[VMOpCode.MOV] = new MovCommand();
|
||||
|
||||
/* =====================================================
|
||||
* 0x0400 – 0x04FF SYSTEM / DEBUG
|
||||
* ===================================================== */
|
||||
COMMANDS[VMOpCode.HALT] = new HaltCommand();
|
||||
// COMMANDS[VMOpCode.SYSCALL] = new SyscallCommand();
|
||||
// COMMANDS[VMOpCode.DEBUG_TRAP] = new DebugTrapCommand();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Default constructor for creating an instance of CommandFactory.
|
||||
* This constructor is empty as no specific initialization is required.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user