|
|
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.