Revision 69d6275b target-sh4/op_helper.c

b/target-sh4/op_helper.c
163 163
#define SETM env->sr |= SR_M
164 164
#define CLRM env->sr &= ~SR_M
165 165

  
166
void helper_div1_T0_T1(void)
166
uint32_t helper_div1(uint32_t arg0, uint32_t arg1)
167 167
{
168 168
    uint32_t tmp0, tmp2;
169 169
    uint8_t old_q, tmp1 = 0xff;
170 170

  
171
    //printf("div1 T0=0x%08x T1=0x%08x M=%d Q=%d T=%d\n", T0, T1, M, Q, T);
171
    //printf("div1 arg0=0x%08x arg1=0x%08x M=%d Q=%d T=%d\n", arg0, arg1, M, Q, T);
172 172
    old_q = Q;
173
    if ((0x80000000 & T1) != 0)
173
    if ((0x80000000 & arg1) != 0)
174 174
	SETQ;
175 175
    else
176 176
	CLRQ;
177
    tmp2 = T0;
178
    T1 <<= 1;
179
    T1 |= T;
177
    tmp2 = arg0;
178
    arg1 <<= 1;
179
    arg1 |= T;
180 180
    switch (old_q) {
181 181
    case 0:
182 182
	switch (M) {
183 183
	case 0:
184
	    tmp0 = T1;
185
	    T1 -= tmp2;
186
	    tmp1 = T1 > tmp0;
184
	    tmp0 = arg1;
185
	    arg1 -= tmp2;
186
	    tmp1 = arg1 > tmp0;
187 187
	    switch (Q) {
188 188
	    case 0:
189 189
		if (tmp1)
......
200 200
	    }
201 201
	    break;
202 202
	case 1:
203
	    tmp0 = T1;
204
	    T1 += tmp2;
205
	    tmp1 = T1 < tmp0;
203
	    tmp0 = arg1;
204
	    arg1 += tmp2;
205
	    tmp1 = arg1 < tmp0;
206 206
	    switch (Q) {
207 207
	    case 0:
208 208
		if (tmp1 == 0)
......
223 223
    case 1:
224 224
	switch (M) {
225 225
	case 0:
226
	    tmp0 = T1;
227
	    T1 += tmp2;
228
	    tmp1 = T1 < tmp0;
226
	    tmp0 = arg1;
227
	    arg1 += tmp2;
228
	    tmp1 = arg1 < tmp0;
229 229
	    switch (Q) {
230 230
	    case 0:
231 231
		if (tmp1)
......
242 242
	    }
243 243
	    break;
244 244
	case 1:
245
	    tmp0 = T1;
246
	    T1 -= tmp2;
247
	    tmp1 = T1 > tmp0;
245
	    tmp0 = arg1;
246
	    arg1 -= tmp2;
247
	    tmp1 = arg1 > tmp0;
248 248
	    switch (Q) {
249 249
	    case 0:
250 250
		if (tmp1 == 0)
......
267 267
	SETT;
268 268
    else
269 269
	CLRT;
270
    //printf("Output: T1=0x%08x M=%d Q=%d T=%d\n", T1, M, Q, T);
270
    //printf("Output: arg1=0x%08x M=%d Q=%d T=%d\n", arg1, M, Q, T);
271
    return arg1;
271 272
}
272 273

  
273 274
void helper_macl(uint32_t arg0, uint32_t arg1)
......
365 366
    return arg1;
366 367
}
367 368

  
368
void helper_rotcl(uint32_t * addr)
369
{
370
    uint32_t new;
371

  
372
    new = (*addr << 1) | (env->sr & SR_T);
373
    if (*addr & 0x80000000)
374
	env->sr |= SR_T;
375
    else
376
	env->sr &= ~SR_T;
377
    *addr = new;
378
}
379

  
380
void helper_rotcr(uint32_t * addr)
381
{
382
    uint32_t new;
383

  
384
    new = (*addr >> 1) | ((env->sr & SR_T) ? 0x80000000 : 0);
385
    if (*addr & 1)
386
	env->sr |= SR_T;
387
    else
388
	env->sr &= ~SR_T;
389
    *addr = new;
390
}
391

  
392 369
void helper_ld_fpscr(uint32_t val)
393 370
{
394 371
    env->fpscr = val & 0x003fffff;

Also available in: Unified diff