@awayfl/avm2
Version:
Virtual machine for executing AS3 code
47 lines (43 loc) • 1.63 kB
text/typescript
import { Bytecode } from '../../Bytecode';
import { CompilerState } from '../CompilerState';
import { emitInlineStack } from './emitInlineVars';
export function emitDomainMemOppcodes(state: CompilerState) {
const z = state.currentOpcode;
const stack0 = emitInlineStack(state, 0);
const stack1 = emitInlineStack(state, 1);
state.emitMain('domainMemory = domainMemory || context.domainMemory;');
switch (z.name) {
//http://docs.redtamarin.com/0.4.1T124/avm2/intrinsics/memory/package.html#si32()
case Bytecode.SI8:
state.emitMain(`domainMemory.setInt8(${stack0}, ${stack1})`);
break;
case Bytecode.SI16:
state.emitMain(`domainMemory.setInt16(${stack0}, ${stack1}, true);`);
break;
case Bytecode.SI32:
state.emitMain(`domainMemory.setInt32(${stack0}, ${stack1}, true);`);
break;
case Bytecode.SF32:
state.emitMain(`domainMemory.setFloat32(${stack0}, ${stack1}, true);`);
break;
case Bytecode.SF64:
state.emitMain(`domainMemory.setFloat64(${stack0}, ${stack1}, true);`);
break;
//http://docs.redtamarin.com/0.4.1T124/avm2/intrinsics/memory/package.html#li32()
case Bytecode.LI8:
state.emitMain(`${stack0} = domainMemory.getInt8(${stack0})`);
break;
case Bytecode.LI16:
state.emitMain(`${stack0} = getInt16(${stack0}, true);`);
break;
case Bytecode.LI32:
state.emitMain(`${stack0} = domainMemory.getInt32(${stack0}, true);`);
break;
case Bytecode.LF32:
state.emitMain(`${stack0} = domainMemory.getFloat32(${stack0}, true);`);
break;
case Bytecode.LF64:
state.emitMain(`${stack0} = domainMemory.getFloat64(${stack0}, true);`);
break;
}
}