UNPKG

@awayfl/avm2

Version:

Virtual machine for executing AS3 code

47 lines (43 loc) 1.63 kB
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; } }