#include #include static inline size_t ADD_S(size_t x, size_t y) { size_t ret; asm ("add %%rdx, %%rax; jno 1f; xor %%rax, %%rax; not %%rax; 1:" : "=a" (ret) : "a" (x) , "d" (y)); return ret; } static inline size_t MUL_S(size_t x, size_t y) { size_t ret; asm ("mul %%rdx; sbb %%rdx, %%rdx; or %%rdx, %%rax" : "=a" (ret) : "a" (x) , "d" (y)); return ret; } int main() { volatile size_t z2 = 34; size_t x,y = 0; size_t z = z2; for (x=0;x<340000000;x++) { y += ADD_S(MUL_S(z, 42 * 3),8); z = (34 * z + 135) % (1 << 30); } return y; }