|
|
1.1 ! root 1: /* Asbwc.c 1.1 86/07/20 */ ! 2: ! 3: ! 4: #include "../tahoealign/align.h" ! 5: sbwc(infop) process_info *infop; ! 6: /* ! 7: /* Subtract with carry. ! 8: /* Note : the play with 'tmp' just before the 'asm' line makes ! 9: /* sure that when the sbwc opcode is executed, the current ! 10: /* carry in psl is the same as the 'offending' process'. ! 11: /* Don't change unless you know exactly what you're doing. ! 12: /* ! 13: /*****************************/ ! 14: { ! 15: register long Register_12; /* Has to be first reg ! */ ! 16: register long Register_11; ! 17: register long Register_10; ! 18: register long tmp; ! 19: ! 20: Register_12 = operand(infop,0)->data; ! 21: Register_11 = operand(infop,1)->data; ! 22: if (carry) /* If process' carry set */ ! 23: tmp = -1; ! 24: else tmp = 0; ! 25: tmp++; /* 0 => carry set. 1 => carry clear */ ! 26: ! 27: Register_10=psl; ! 28: Set_psl(r10); /* restore the user psl */ ! 29: asm(" sbwc r12,r11"); ! 30: asm(" movpsl r12"); ! 31: New_cc (Register_12); ! 32: ! 33: write_back(infop, Register_11, operand(infop,1) ); ! 34: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.