My assemble skills are quit low, but I found previous thread http://www.gamedev.net/topic/634187-angelscript-on-raspberry-pi . From that i disassemble such code :
struct Int4
{
int a;
};
struct Int8
{
int a,b;
};
struct Int12
{
int a,b,c;
};
struct Float20
{
float a,b,c,d,e;
};
Int4 test4(void)
{
Int4 p={1};
return p;
}
Int8 test8(void)
{
Int8 p={1,2};
return p;
}
Int12 test12(void)
{
Int12 p={1,2,3};
return p;
}
Float20 test20(void)
{
Float20 p={1.1f, 2.2f, 3.3f, 4.4f, 5.5f};
return p;
}
int main() {
Int4 i4 = test4();
Int8 i8 = test8();
Int12 i12 = test12();
Float20 f20= test20();
std::cout << "Valor: " << i4.a << ".\n";
std::cout << "Valor: " << i8.a << ".\n";
std::cout << "Valor: " << i8.b << ".\n";
std::cout << "Valor: " << i12.a << ".\n";
std::cout << "Valor: " << i12.b << ".\n";
std::cout << "Valor: " << i12.c << ".\n";
std::cout << "Valor: " << f20.a << ".\n";
std::cout << "Valor: " << f20.b << ".\n";
std::cout << "Valor: " << f20.c << ".\n";
std::cout << "Valor: " << f20.d << ".\n";
std::cout << "Valor: " << f20.e << ".\n";
}
test4():
0005fa00: push {r7}
0005fa02: sub sp, #12
0005fa04: add r7, sp, #0
65 Int4 p={1};
0005fa06: movs r3, #1
0005fa08: str r3, [r7, #4]
66 return p;
0005fa0a: ldr r3, [r7, #4]
67 }
0005fa0c: mov r0, r3
0005fa0e: add.w r7, r7, #12
0005fa12: mov sp, r7
0005fa14: pop {r7}
0005fa16: bx lr
69 {
test8():
0005fa18: push {r7}
0005fa1a: sub sp, #12
0005fa1c: add r7, sp, #0
0005fa1e: str r0, [r7, #4]
70 Int8 p={1,2};
0005fa20: ldr r2, [r7, #4]
0005fa22: movw r3, #11664 ; 0x2d90
0005fa26: movt r3, #22
0005fa2a: ldmia.w r3, {r0, r1}
0005fa2e: stmia.w r2, {r0, r1}
71 return p;
0005fa32: nop
72 }
0005fa34: ldr r0, [r7, #4]
0005fa36: add.w r7, r7, #12
0005fa3a: mov sp, r7
0005fa3c: pop {r7}
0005fa3e: bx lr
74 {
test12():
0005fa40: push {r4, r7}
0005fa42: sub sp, #8
0005fa44: add r7, sp, #0
0005fa46: str r0, [r7, #4]
75 Int12 p={1,2,3};
0005fa48: ldr r2, [r7, #4]
0005fa4a: movw r3, #11672 ; 0x2d98
0005fa4e: movt r3, #22
0005fa52: mov r4, r2
0005fa54: ldmia.w r3, {r0, r1, r2}
0005fa58: stmia.w r4, {r0, r1, r2}
76 return p;
0005fa5c: nop
77 }
0005fa5e: ldr r0, [r7, #4]
0005fa60: add.w r7, r7, #8
0005fa64: mov sp, r7
0005fa66: pop {r4, r7}
0005fa68: bx lr
0005fa6a: nop
79 {
test20():
0005fa6c: push {r4, r5, r7}
0005fa6e: sub sp, #12
0005fa70: add r7, sp, #0
0005fa72: str r0, [r7, #4]
80 Float20 p={1.1f, 2.2f, 3.3f, 4.4f, 5.5f};
0005fa74: ldr r2, [r7, #4]
0005fa76: movw r3, #11684 ; 0x2da4
0005fa7a: movt r3, #22
0005fa7e: mov r4, r2
0005fa80: mov r5, r3
0005fa82: ldmia r5!, {r0, r1, r2, r3}
0005fa84: stmia r4!, {r0, r1, r2, r3}
0005fa86: ldr r3, [r5, #0]
0005fa88: str r3, [r4, #0]
81 return p;
0005fa8a: nop
82 }
0005fa8c: ldr r0, [r7, #4]
0005fa8e: add.w r7, r7, #12
0005fa92: mov sp, r7
0005fa94: pop {r4, r5, r7}
0005fa96: bx lr
85 int main() {
main():
0005fa98: push {r7, lr}
0005fa9a: sub sp, #48 ; 0x30
0005fa9c: add r7, sp, #0
87 Int4 i4 = test4();
0005fa9e: bl 0x5fa00 <test4()>
0005faa2: mov r3, r0
0005faa4: str r3, [r7, #4]
88 Int8 i8 = test8();
0005faa6: add.w r3, r7, #8
0005faaa: mov r0, r3
0005faac: bl 0x5fa18 <test8()>
89 Int12 i12 = test12();
0005fab0: add.w r3, r7, #16
0005fab4: mov r0, r3
0005fab6: bl 0x5fa40 <test12()>
90 Float20 f20= test20();
0005faba: add.w r3, r7, #28
0005fabe: mov r0, r3
0005fac0: bl 0x5fa6c <test20()>
91 std::cout << "Valor: " << i4.a << ".\n";
0005fac4: movw r0, #58880 ; 0xe600
0005fac8: movt r0, #28
0005facc: movw r1, #11704 ; 0x2db8
0005fad0: movt r1, #22
0005fad4: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
0005fad8: mov r3, r0
0005fada: mov r2, r3
0005fadc: ldr r3, [r7, #4]
0005fade: mov r0, r2
0005fae0: mov r1, r3
0005fae2: blx 0xd6a8 <_ZNSolsEi>
0005fae6: mov r3, r0
0005fae8: mov r0, r3
0005faea: movw r1, #11712 ; 0x2dc0
0005faee: movt r1, #22
0005faf2: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
92 std::cout << "Valor: " << i8.a << ".\n";
0005faf6: movw r0, #58880 ; 0xe600
0005fafa: movt r0, #28
0005fafe: movw r1, #11704 ; 0x2db8
0005fb02: movt r1, #22
0005fb06: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
0005fb0a: mov r3, r0
0005fb0c: mov r2, r3
0005fb0e: ldr r3, [r7, #8]
0005fb10: mov r0, r2
0005fb12: mov r1, r3
0005fb14: blx 0xd6a8 <_ZNSolsEi>
0005fb18: mov r3, r0
0005fb1a: mov r0, r3
0005fb1c: movw r1, #11712 ; 0x2dc0
0005fb20: movt r1, #22
0005fb24: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
93 std::cout << "Valor: " << i8.b << ".\n";
0005fb28: movw r0, #58880 ; 0xe600
0005fb2c: movt r0, #28
0005fb30: movw r1, #11704 ; 0x2db8
0005fb34: movt r1, #22
0005fb38: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
0005fb3c: mov r3, r0
0005fb3e: mov r2, r3
0005fb40: ldr r3, [r7, #12]
0005fb42: mov r0, r2
0005fb44: mov r1, r3
0005fb46: blx 0xd6a8 <_ZNSolsEi>
0005fb4a: mov r3, r0
0005fb4c: mov r0, r3
0005fb4e: movw r1, #11712 ; 0x2dc0
0005fb52: movt r1, #22
0005fb56: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
94 std::cout << "Valor: " << i12.a << ".\n";
0005fb5a: movw r0, #58880 ; 0xe600
0005fb5e: movt r0, #28
0005fb62: movw r1, #11704 ; 0x2db8
0005fb66: movt r1, #22
0005fb6a: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
0005fb6e: mov r3, r0
0005fb70: mov r2, r3
0005fb72: ldr r3, [r7, #16]
0005fb74: mov r0, r2
0005fb76: mov r1, r3
0005fb78: blx 0xd6a8 <_ZNSolsEi>
0005fb7c: mov r3, r0
0005fb7e: mov r0, r3
0005fb80: movw r1, #11712 ; 0x2dc0
0005fb84: movt r1, #22
0005fb88: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
95 std::cout << "Valor: " << i12.b << ".\n";
0005fb8c: movw r0, #58880 ; 0xe600
0005fb90: movt r0, #28
0005fb94: movw r1, #11704 ; 0x2db8
0005fb98: movt r1, #22
0005fb9c: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
0005fba0: mov r3, r0
0005fba2: mov r2, r3
0005fba4: ldr r3, [r7, #20]
0005fba6: mov r0, r2
0005fba8: mov r1, r3
0005fbaa: blx 0xd6a8 <_ZNSolsEi>
0005fbae: mov r3, r0
0005fbb0: mov r0, r3
0005fbb2: movw r1, #11712 ; 0x2dc0
0005fbb6: movt r1, #22
0005fbba: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
96 std::cout << "Valor: " << i12.c << ".\n";
0005fbbe: movw r0, #58880 ; 0xe600
0005fbc2: movt r0, #28
0005fbc6: movw r1, #11704 ; 0x2db8
0005fbca: movt r1, #22
0005fbce: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
0005fbd2: mov r3, r0
0005fbd4: mov r2, r3
0005fbd6: ldr r3, [r7, #24]
0005fbd8: mov r0, r2
0005fbda: mov r1, r3
0005fbdc: blx 0xd6a8 <_ZNSolsEi>
0005fbe0: mov r3, r0
0005fbe2: mov r0, r3
0005fbe4: movw r1, #11712 ; 0x2dc0
0005fbe8: movt r1, #22
0005fbec: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
97 std::cout << "Valor: " << f20.a << ".\n";
0005fbf0: movw r0, #58880 ; 0xe600
0005fbf4: movt r0, #28
0005fbf8: movw r1, #11704 ; 0x2db8
0005fbfc: movt r1, #22
0005fc00: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
0005fc04: mov r3, r0
0005fc06: vldr s15, [r7, #28]
0005fc0a: mov r0, r3
0005fc0c: vmov.f32 s0, s15
0005fc10: blx 0xcfac <_ZNSolsEf>
0005fc14: mov r3, r0
0005fc16: mov r0, r3
0005fc18: movw r1, #11712 ; 0x2dc0
0005fc1c: movt r1, #22
0005fc20: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
98 std::cout << "Valor: " << f20.b << ".\n";
0005fc24: movw r0, #58880 ; 0xe600
0005fc28: movt r0, #28
0005fc2c: movw r1, #11704 ; 0x2db8
0005fc30: movt r1, #22
0005fc34: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
0005fc38: mov r3, r0
0005fc3a: vldr s15, [r7, #32]
0005fc3e: mov r0, r3
0005fc40: vmov.f32 s0, s15
0005fc44: blx 0xcfac <_ZNSolsEf>
0005fc48: mov r3, r0
0005fc4a: mov r0, r3
0005fc4c: movw r1, #11712 ; 0x2dc0
0005fc50: movt r1, #22
0005fc54: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
99 std::cout << "Valor: " << f20.c << ".\n";
0005fc58: movw r0, #58880 ; 0xe600
0005fc5c: movt r0, #28
0005fc60: movw r1, #11704 ; 0x2db8
0005fc64: movt r1, #22
0005fc68: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
0005fc6c: mov r3, r0
0005fc6e: vldr s15, [r7, #36] ; 0x24
0005fc72: mov r0, r3
0005fc74: vmov.f32 s0, s15
0005fc78: blx 0xcfac <_ZNSolsEf>
0005fc7c: mov r3, r0
0005fc7e: mov r0, r3
0005fc80: movw r1, #11712 ; 0x2dc0
0005fc84: movt r1, #22
0005fc88: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
100 std::cout << "Valor: " << f20.d << ".\n";
0005fc8c: movw r0, #58880 ; 0xe600
0005fc90: movt r0, #28
0005fc94: movw r1, #11704 ; 0x2db8
0005fc98: movt r1, #22
0005fc9c: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
0005fca0: mov r3, r0
0005fca2: vldr s15, [r7, #40] ; 0x28
0005fca6: mov r0, r3
0005fca8: vmov.f32 s0, s15
0005fcac: blx 0xcfac <_ZNSolsEf>
0005fcb0: mov r3, r0
0005fcb2: mov r0, r3
0005fcb4: movw r1, #11712 ; 0x2dc0
0005fcb8: movt r1, #22
0005fcbc: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
101 std::cout << "Valor: " << f20.e << ".\n";
0005fcc0: movw r0, #58880 ; 0xe600
0005fcc4: movt r0, #28
0005fcc8: movw r1, #11704 ; 0x2db8
0005fccc: movt r1, #22
0005fcd0: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
0005fcd4: mov r3, r0
0005fcd6: vldr s15, [r7, #44] ; 0x2c
0005fcda: mov r0, r3
0005fcdc: vmov.f32 s0, s15
0005fce0: blx 0xcfac <_ZNSolsEf>
0005fce4: mov r3, r0
0005fce6: mov r0, r3
0005fce8: movw r1, #11712 ; 0x2dc0
0005fcec: movt r1, #22
0005fcf0: blx 0xd174 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
281 }
0005fcf4: movs r3, #0
0005fcf6: b.n 0x5fcfc <main()+612>
0005fcf8: blx 0xd27c <__cxa_end_cleanup>
0005fcfc: mov r0, r3
0005fcfe: add.w r7, r7, #48 ; 0x30
0005fd02: mov sp, r7
0005fd04: pop {r7, pc}
0005fd06: nop