• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 #include <stdio.h>
3 
4 typedef unsigned long long int ULong;
5 typedef unsigned           int UInt;
6 
7 ULong arg64, res64;
8 
9 extern void foo64 ( void );
10 asm("\n"
11 "foo64:\n"
12 "\tpushq %rcx\n"
13 
14 "\tmovq $0, %rax\n"
15 "\tmovq arg64, %rcx\n"
16 
17 "Lagain64:\n"
18 "\taddq $177, %rax\n"
19 "\tdecq %rcx\n"
20 "\tjrcxz Lout64\n"
21 "\tjmp Lagain64\n"
22 
23 "Lout64:\n"
24 "\tmovq %rax, res64\n"
25 
26 "\tpopq %rcx\n"
27 "\tret\n"
28 );
29 
30 
31 UInt arg32, res32;
32 
33 extern void foo32 ( void );
34 asm("\n"
35 "foo32:\n"
36 "\tpushq %rcx\n"
37 
38 "\tmovq $0, %rax\n"
39 "\tmovl arg32, %ecx\n"
40 
41 "Lagain32:\n"
42 "\taddq $177, %rax\n"
43 "\tdecl %ecx\n"
44 "\tjecxz Lout32\n"
45 "\tjmp Lagain32\n"
46 
47 "Lout32:\n"
48 "\tmovl %eax, res32\n"
49 
50 "\tpopq %rcx\n"
51 "\tret\n"
52 );
53 
54 
55 
main(void)56 int main ( void )
57 {
58   arg64 = 100;
59   res64 = 0;
60   foo64();
61   printf("%lld\n", res64);
62 
63   arg32 = 1234;
64   res32 = 0;
65   foo32();
66   printf("%d\n", res32);
67 
68   return 0;
69 }
70