• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 #include <stdio.h>
3 
4 typedef unsigned long long int ULong;
5 
do_clc(void)6 ULong do_clc ( void )
7 {
8   ULong res;
9   __asm__ __volatile__(
10      "pushq $0x8d5\n\t" /* OSZACP */
11      "popfq\n\t"
12      "clc\n\t"
13      "pushfq\n\t"
14      "popq %0"
15      : "=r"(res)
16      :
17      : "memory", "cc"
18      );
19   return res;
20 }
21 
do_stc(void)22 ULong do_stc ( void )
23 {
24   ULong res;
25   __asm__ __volatile__(
26      "pushq $0x0\n\t"
27      "popfq\n\t"
28      "stc\n\t"
29      "pushfq\n\t"
30      "popq %0"
31      : "=r"(res)
32      :
33      : "memory", "cc"
34      );
35   return res;
36 }
37 
do_cmc(void)38 ULong do_cmc ( void )
39 {
40   ULong res;
41   __asm__ __volatile__(
42      "pushq $0x0\n\t"
43      "popfq\n\t"
44      "stc\n\t"
45      "cmc\n\t"
46      "pushfq\n\t"
47      "popq %0"
48      : "=r"(res)
49      :
50      : "memory", "cc"
51      );
52   return res;
53 }
54 
main(void)55 int main ( void )
56 {
57   printf("clc: 0x%016llx\n", 0x8d5 & do_clc());
58   printf("stc: 0x%016llx\n", 0x8d5 & do_stc());
59   printf("cmc: 0x%016llx\n", 0x8d5 & do_cmc());
60   return 0;
61 }
62