mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-27 06:34:11 +00:00
59 lines
1,007 B
R
59 lines
1,007 B
R
#include "Instruction.h"
|
|
#include "defs.h"
|
|
|
|
@implementation Instruction
|
|
+ (id) opcode: (opcode_e) oc
|
|
{
|
|
return [[self alloc] initWithOpcode: oc operand: 0 label: nil];
|
|
}
|
|
|
|
+ (id) opcode: (opcode_e) oc operand: (int) op
|
|
{
|
|
return [[self alloc] initWithOpcode: oc operand: op label: nil];
|
|
}
|
|
|
|
+ (id) opcode: (opcode_e) oc label: (Instruction *) l
|
|
{
|
|
return [[self alloc] initWithOpcode: oc operand: 0 label: l];
|
|
}
|
|
|
|
- (id) initWithOpcode: (opcode_e) oc operand: (int) op label: (Instruction *) l
|
|
{
|
|
self = [super init];
|
|
opcode = oc;
|
|
operand = op;
|
|
label = l;
|
|
return self;
|
|
}
|
|
|
|
- (void) offset: (int) ofs
|
|
{
|
|
offset = ofs;
|
|
}
|
|
|
|
- (int) offset
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
- (opcode_e) opcode
|
|
{
|
|
return opcode;
|
|
}
|
|
|
|
- (void) emitStruct: (instruction_t *) program
|
|
{
|
|
program[offset].opcode = opcode;
|
|
if (label) {
|
|
program[offset].operand = [label offset];
|
|
} else {
|
|
program[offset].operand = operand;
|
|
}
|
|
}
|
|
|
|
- (void) markReachable
|
|
{
|
|
[label mark];
|
|
}
|
|
|
|
@end
|