1 /* Aemul.c 1.2 90/12/04 */ 2 3 4 #include "align.h" 5 emul(infop) process_info *infop; 6 /* 7 /* Extended precision multiplication. 8 /* 9 /***************************************/ 10 { 11 register long Register_12; /* multiplicand */ 12 register long Register_11; /* product least */ 13 register long Register_10; /* product most */ 14 register long Register_9; /* addend */ 15 register long Register_8; /* multiplier */ 16 quadword result; 17 18 Register_8 = operand(infop, 0)->data; 19 Register_12 = operand(infop, 1)->data; 20 Register_9 = operand(infop, 2)->data; 21 Register_10=psl; 22 Set_psl(r10); /* restore the user psl */ 23 asm (" emul r8,r12,r9,r10"); 24 asm (" movpsl r8"); 25 New_cc (Register_8); 26 result.high = Register_10; 27 result.low = Register_11; 28 write_quadword (infop, result, operand(infop, 3)); 29 } 30