|
|
1.1 root 1: static void __F26 ()
2: {
3: Regs[0].s32 = 0;
4: nZ = 0;
5: N = 0 < 0;
6: V = 0;
7: C = 0;
8: }
9: static void __F30 ()
10: {
11: Regs[0].s32 = 10;
12: nZ = 10;
13: N = 10 < 0;
14: V = 0;
15: C = 0;
16: }
17: static void __F32 ()
18: {
19: Regs[1].s32 = 2;
20: nZ = 2;
21: N = 2 < 0;
22: V = 0;
23: C = 0;
24: }
25: static void __F34 ()
26: {
27: u16 src = Regs[1].s16;
28: u32 dest = (u16)Regs[0].s16;
29: dest *= (u32)src;
30: nZ = dest;
31: N = ((s32)dest) < 0;
32: C = V = 0;
33: Regs[0].s32 = dest;
34: }
35: static void __F36 ()
36: {
37: s16 src = Regs[1].s16;
38: s32 dest = (s16)Regs[0].s16;
39: dest *= (s32)src;
40: nZ = dest;
41: N = ((s32)dest) < 0;
42: C = V = 0;
43: Regs[0].s32 = dest;
44: }
45: static void __F38 ()
46: {
47: u32 val = Regs[0].s32;
48:
49: s32 src = Regs[1].s32 & 63;
50: if (src >= 32) {
51: V = (val != 0);
52: X = C = (src == 32 ? val & 1 : 0);
53: val = 0;
54: } else if (src == 0) {
55: C = 0;
56: V = 0;
57: } else {
58: u32 mask = (0xffffffff << (31 - src)) & 0xffffffff;
59: V = (val & mask) != mask && (val & mask) != 0;
60: val <<= src-1;
61: C = X = (val & 0x80000000);
62: val <<= 1;
63: val &= 0xffffffff;
64: }
65: nZ = ((s32)(val)) != 0;
66: N = ((s32)(val)) < 0;
67: Regs[0].s32 = val;
68: }
69: static void __F3a ()
70: {
71: u32 val = Regs[0].s32;
72:
73: s32 src = Regs[1].s32 & 63;
74: u32 sign = (0x80000000 & val) >> 31;
75: if (src >= 32) {
76: val = 0xffffffff & (u32)-sign;
77: X = C = sign;
78: } else if (src == 0) {
79: C = 0;
80: V = 0;
81: } else {
82: val >>= src - 1;
83: C = X = val & 1;
84: val >>= 1;
85: val |= (0xffffffff << (32 - src)) & (u32)-sign;
86: val &= 0xffffffff;
87: }
88: nZ = ((s32)(val)) != 0;
89: N = ((s32)(val)) < 0;
90: Regs[0].s32 = val;
91: }
92: static void __F3c ()
93: {
94: u32 val = Regs[0].s32;
95:
96: s32 shift = Regs[1].s32 & 63;
97: if (shift >= 32) {
98: X = C = (shift == 32 ? val & 1 : 0);
99: val = 0;
100: } else if (shift == 0) {
101: C = 0;
102: V = 0;
103: } else {
104: val <<= shift-1;
105: C = X = (val & 0x80000000);
106: val <<= 1;
107: val &= 0xffffffff;
108: }
109: nZ = ((s32)(val)) != 0;
110: N = ((s32)(val)) < 0;
111: Regs[0].s32 = val;
112: }
113: static void __F3e ()
114: {
115: u32 val = Regs[0].s32;
116:
117: s32 shift = Regs[1].s32 & 63;
118: if (shift >= 32) {
119: val = 0;
120: X = C = (shift == 32) && (val >> 31);
121: } else if (shift == 0) {
122: C = 0;
123: V = 0;
124: } else {
125: val >>= shift - 1;
126: C = X = val & 1;
127: val >>= 1;
128: }
129: nZ = ((s32)(val)) != 0;
130: N = ((s32)(val)) < 0;
131: Regs[0].s32 = val;
132: }
133: static void __F40 ()
134: {
135: u32 val = (u32)Regs[0].s32;
136:
137: s32 cnt = Regs[1].s32 & 63;
138: V = 0;
139: u32 loval;
140: cnt &= 31;
141: loval = val >> (32 - cnt);
142: val <<= cnt;
143: val |= loval;
144: val &= 0xffffffff;
145: C = val & 1;
146: nZ = val;
147: N = ((s32)val) < 0;
148: Regs[0].s32 = val;
149: }
150: static void __F42 ()
151: {
152: u32 val = (u32)Regs[0].s32;
153:
154: s32 cnt = (Regs[1].s32 & 63) - 1;
155: V = 0;
156: u32 loval = val >> (31 - cnt);
157: u32 carry = loval & 1;
158: val = (((val << 1) | (X ? 1 : 0)) << cnt) | (loval >> 1);
159: X = carry;
160: val &= 0xffffffff;
161: C = X;
162: nZ = val;
163: N = ((s32)val) < 0;
164: Regs[0].s32 = val;
165: }
166: static void __F44 ()
167: {
168: u32 src = Regs[1].s32;
169: u32 dest = Regs[0].s32;
170: src &= 31;
171: nZ = !(1 ^ ((dest >> src) & 1));
172: dest &= ~(1 << src);
173: Regs[0].s32 = dest;
174: }
175: static void __F4e ()
176: {
177: Regs[0].s32 = 0;
178: nZ = 0;
179: N = 0 < 0;
180: V = 0;
181: C = 0;
182: }
183: static void __F50 ()
184: {
185: nZ = STMemory_ReadByte(Regs[8].s32);
186: Regs[0].s8 = nZ;
187: Regs[8].s32 += 1;
188: N = nZ < 0;
189: V = 0;
190: C = 0;
191: }
192: static void __F5a ()
193: {
194: nZ = 1048575;
195: Regs[0].s32 = nZ;
196: N = nZ < 0;
197: V = 0;
198: C = 0;
199: }
200: static void __F5c ()
201: {
202: u16 src = Regs[1].s16;
203: u32 dest = (u16)Regs[2].s16;
204: dest *= (u32)src;
205: nZ = dest;
206: N = ((s32)dest) < 0;
207: C = V = 0;
208: Regs[2].s32 = dest;
209: }
210: static void __F5e ()
211: {
212: s32 flgs, flgo, flgn, dest;
213: dest = Regs[0].s32;
214:
215: nZ = (s32)dest - (s32)1;
216: Regs[0].s32 = nZ;
217: flgs = ((s32)1) < 0;
218: flgo = ((s32)dest) < 0;
219: flgn = ((s32)nZ) < 0;
220: V = (flgs ^ flgo) & (flgn ^ flgo);
221: C = ((s32)1) > ((s32)dest);
222: X = C;
223: N = (flgn != 0);
224: }
225: static void __F60 ()
226: {
227: nZ = Regs[0].s32;
228: N = nZ < 0;
229: V = 0;
230: C = 0;
231: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.