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