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