, , ++ IR . , , LLVM, LLVM IR, spelunking. , , LLVM IR. , WebAssembly LLVM IR, ++ . , , !
, ++, *this. . i32? WebAssembly i32.
LLVM IR :
define linkonce_odr void @FirstClass::FirstClass(int, int)(%class.FirstClass*, i32, i32) unnamed_addr #2 comdat align 2 !dbg !29 {
%class.FirstClass* - *this. , WebAssembly, i32.
... ? *this, . LLVM :
%1 = alloca %class.FirstClass, align 4
%2 = alloca %class.FirstClass, align 4
%3 = alloca %class.FirstClass, align 4
%4 = alloca %class.FirstClass, align 4
, FirstClass. WebAssembly, - . WebAssembly 3 , ++:
, 1. 2. *this , Memory. Memory? Emscripten ! , 4, , (i32.load offset=4 (i32.const 0)). alloca LLVM , (i32.add (get_local $0) (i32.const 48)) ( $0) . *this.
, ++ on-stack ! / WebAssembly ( ). ISA, x86 ARM: , ISA . WebAssembly ISA, , , LLVM/Emscripten , . , , - ( ), ( WebAssembly ).
, :
. , , 64 . alloca. () WebAssembly ABI, .
64? 4 x 16, FirstClass: 3 i32, 16 , . sizeof(FirstClass) ++ ( 12), ( 4 , ). ++ LLVM WebAssembly.