Rgetputfield: con 16r1 << 16;Rgetputstatic: con 16r2 << 16;Rinvokeinterface: con 16r3 << 16;Rinvokespecial: con 16r4 << 16;Rinvokestatic: con 16r5 << 16;Rinvokevirtual: con 16r6 << 16;Rstaticmp: con 16r8 << 16;Rspecialmp: con 16r10 << 16;PSRC: con 16r1 << 2; # patch source operandPDST: con 16r2 << 2; # destinationPMID: con 16r3 << 2; # middlePIMM: con 16r0; # patch immediate operandPSIND: con 16r1; # single indirect offsetPDIND1: con 16r2; # 1st offset of double indirectPDIND2: con 16r3; # 2nd offsetSAVEINST: con 1; # save 'ref Inst' for patching# special fieldsRCLASS: con "@Class";RADT: con "@adt";RJEX: con "@jex";RMP: con "@mp";RNP: con "@np";ROBJ: con "@obj";RSYS: con "@sys";# special class nameRLOADER: con "@Loader";RCLASSCLASS: con "java/lang/Class";Ipatch: adt { n: int; # no. of significant elts. in pinfo & i max: int; # number of elements pinfo & i can hold pinfo: array of int; # operand patch directives i: array of ref Inst; # instructions to patch (runtime relocation)};## Load-time relocation.#Freloc: adt { field: string; # field name sig: string; # Java type signature flags: int; # access flags ipatch: ref Ipatch; # instruction patch information next: cyclic ref Freloc;};Creloc: adt { classname: string; fr: ref Freloc; tail: ref Freloc; n: int; # number of elements in 'fr'};## Run-time relocation.#RTReloc: adt { field: string; # field name sig: string; # Java type signature flags: int; # access flags ipatch: ref Ipatch; # instruction patch information next: cyclic ref RTReloc;};RTClass: adt { classname: string; rtr: ref RTReloc; tail: ref RTReloc; n: int; # number of elements in 'rtr' off: int; # Module Data offset};
Rgetputfield: con 16r1 << 16;
Rgetputstatic: con 16r2 << 16;
Rinvokeinterface: con 16r3 << 16;
Rinvokespecial: con 16r4 << 16;
Rinvokestatic: con 16r5 << 16;
Rinvokevirtual: con 16r6 << 16;
Rstaticmp: con 16r8 << 16;
Rspecialmp: con 16r10 << 16;
PSRC: con 16r1 << 2; # patch source operand
PDST: con 16r2 << 2; # destination
PMID: con 16r3 << 2; # middle
PIMM: con 16r0; # patch immediate operand
PSIND: con 16r1; # single indirect offset
PDIND1: con 16r2; # 1st offset of double indirect
PDIND2: con 16r3; # 2nd offset
SAVEINST: con 1; # save 'ref Inst' for patching
# special fields
RCLASS: con "@Class";
RADT: con "@adt";
RJEX: con "@jex";
RMP: con "@mp";
RNP: con "@np";
ROBJ: con "@obj";
RSYS: con "@sys";
# special class name
RLOADER: con "@Loader";
RCLASSCLASS: con "java/lang/Class";
Ipatch: adt {
n: int; # no. of significant elts. in pinfo & i
max: int; # number of elements pinfo & i can hold
pinfo: array of int; # operand patch directives
i: array of ref Inst; # instructions to patch (runtime relocation)
};
#
# Load-time relocation.
#
Freloc: adt {
field: string; # field name
sig: string; # Java type signature
flags: int; # access flags
ipatch: ref Ipatch; # instruction patch information
next: cyclic ref Freloc;
};
Creloc: adt {
classname: string;
fr: ref Freloc;
tail: ref Freloc;
n: int; # number of elements in 'fr'
};
#
# Run-time relocation.
#
RTReloc: adt {
field: string; # field name
sig: string; # Java type signature
flags: int; # access flags
ipatch: ref Ipatch; # instruction patch information
next: cyclic ref RTReloc;
};
RTClass: adt {
classname: string;
rtr: ref RTReloc;
tail: ref RTReloc;
n: int; # number of elements in 'rtr'
off: int; # Module Data offset
};