| |
| #include <stdio.h> |
| |
| typedef unsigned long long int ULong; |
| |
| ULong do_clc ( void ) |
| { |
| ULong res; |
| __asm__ __volatile__( |
| "pushq $0x8d5\n\t" /* OSZACP */ |
| "popfq\n\t" |
| "clc\n\t" |
| "pushfq\n\t" |
| "popq %0" |
| : "=r"(res) |
| : |
| : "memory", "cc" |
| ); |
| return res; |
| } |
| |
| ULong do_stc ( void ) |
| { |
| ULong res; |
| __asm__ __volatile__( |
| "pushq $0x0\n\t" |
| "popfq\n\t" |
| "stc\n\t" |
| "pushfq\n\t" |
| "popq %0" |
| : "=r"(res) |
| : |
| : "memory", "cc" |
| ); |
| return res; |
| } |
| |
| ULong do_cmc ( void ) |
| { |
| ULong res; |
| __asm__ __volatile__( |
| "pushq $0x0\n\t" |
| "popfq\n\t" |
| "stc\n\t" |
| "cmc\n\t" |
| "pushfq\n\t" |
| "popq %0" |
| : "=r"(res) |
| : |
| : "memory", "cc" |
| ); |
| return res; |
| } |
| |
| int main ( void ) |
| { |
| printf("clc: 0x%016llx\n", 0x8d5 & do_clc()); |
| printf("stc: 0x%016llx\n", 0x8d5 & do_stc()); |
| printf("cmc: 0x%016llx\n", 0x8d5 & do_cmc()); |
| return 0; |
| } |