/* * Inline assembly snippet * Polprog 2018 * 3 clause BSD */ #include int main(){ /* * a and b are volatile since inline asm * snippets operate on memory addresses, we need to make sure * the computer re-reads the memory for printf() argument */ volatile float a = 2; asm volatile(" \ fld %[floi] \n\ fsqrt \n\ fstp %[floo] \n\ ": [floo] "=m" (a) :[floi] "m" (a) :); printf("f: sqrt(2) =\t%f\n", a); volatile double b = 141; /* Note: Use l suffix for doubles */ asm volatile(" \ fldl %[floi] \n\ fsqrt \n\ fstpl %[floo] \n\ ": [floo] "=m" (b) :[floi] "m" (b) :); printf("d: sqrt(141) =\t%f\n", b); }