1 | void func() { |
2 | |
3 | #ifdef __powerpc64__ |
4 | __asm__ ( |
5 | "mflr 0;" |
6 | "std 0,16(1);" |
7 | "addi 1,1,-24;" |
8 | "mr 31,1;" |
9 | ".cfi_def_cfa_offset 24;" |
10 | "addi 0,0,0;" |
11 | "addi 1,1,24;" |
12 | "ld 0,16(1);" |
13 | ".cfi_def_cfa_offset 0;" |
14 | ); |
15 | #elif !defined __mips__ |
16 | __asm__ ( |
17 | "pushq $0x10;" |
18 | ".cfi_def_cfa_offset 16;" |
19 | "jmp label;" |
20 | "movq $0x48, %rax;" |
21 | "label: subq $0x38, %rax;" |
22 | "movq $0x48, %rcx;" |
23 | "movq $0x48, %rdx;" |
24 | "movq $0x48, %rax;" |
25 | "popq %rax;" |
26 | ); |
27 | #elif __mips64 |
28 | __asm__ ( |
29 | "daddiu $sp,$sp,-16;" |
30 | ".cfi_def_cfa_offset 16;" |
31 | "sd $ra,8($sp);" |
32 | ".cfi_offset 31, -8;" |
33 | "daddiu $ra,$zero,0;" |
34 | "ld $ra,8($sp);" |
35 | "daddiu $sp, $sp,16;" |
36 | ".cfi_restore 31;" |
37 | ".cfi_def_cfa_offset 0;" |
38 | ); |
39 | #else |
40 | // For MIPS32 |
41 | __asm__ ( |
42 | "addiu $sp,$sp,-8;" |
43 | ".cfi_def_cfa_offset 8;" |
44 | "sw $ra,4($sp);" |
45 | ".cfi_offset 31, -4;" |
46 | "addiu $ra,$zero,0;" |
47 | "lw $ra,4($sp);" |
48 | "addiu $sp,$sp,8;" |
49 | ".cfi_restore 31;" |
50 | ".cfi_def_cfa_offset 0;" |
51 | ); |
52 | #endif |
53 | } |
54 | |
55 | int main(int argc, char const *argv[]) |
56 | { |
57 | func(); |
58 | } |
59 | |