Commit | Line | Data |
---|---|---|
6499767c | 1 | /* Aaobleq.c 1.2 90/12/04 */ |
a9e88eb0 | 2 | |
6499767c | 3 | #include "align.h" |
a9e88eb0 SL |
4 | aobleq(infop) process_info *infop; |
5 | /* | |
6 | /* Add one, branch if less or equal. | |
7 | /* Can't use real HW opcodes since we don't want to branch here. | |
8 | /* | |
9 | /*******************************************/ | |
10 | { | |
11 | register long limit, index, new_address, complement; | |
12 | ||
13 | limit = operand(infop,0)->data; | |
14 | index = operand(infop,1)->data; | |
15 | complement = limit + ~index; | |
16 | if ( complement < 0){ carry_0; negative_1;} else{negative_0; carry_1;} | |
17 | if ( complement == 0) zero_1; else zero_0; | |
18 | overflow_0; | |
19 | write_back (infop, index+1, operand(infop,1)); | |
20 | new_address = operand(infop,2)->address; | |
21 | if (!negative || zero) pc = new_address; | |
22 | } |