Revision 1ef59d0a

b/target-ppc/exec.h
139 139

  
140 140
void do_fctiw (void);
141 141
void do_fctiwz (void);
142
void do_fnmadds (void);
143
void do_fnmsubs (void);
142 144
void do_fsqrt (void);
143 145
void do_fsqrts (void);
144 146
void do_fres (void);
b/target-ppc/helper.c
163 163
                   *BATu, *BATl, BEPIu, BEPIl, bl);
164 164
        }
165 165
#endif
166
        env->spr[DAR] = virtual;
167 166
    }
168 167
    /* No hit */
169 168
    return ret;
......
543 542
    access_type = env->access_type;
544 543
    if (env->user_mode_only) {
545 544
        /* user mode only emulation */
546
        ret = -1;
545
        ret = -2;
547 546
        goto do_fault;
548 547
    }
549 548
    /* NASTY BUG workaround */
550 549
    if (access_type == ACCESS_CODE && rw) {
551
	//	printf("%s: ERROR WRITE CODE ACCESS\n", __func__);
550
	printf("%s: ERROR WRITE CODE ACCESS\n", __func__);
552 551
	access_type = ACCESS_INT;
553 552
    }
554 553
    ret = get_physical_address(env, &physical, &prot,
......
674 673

  
675 674
void _store_msr (CPUState *env, uint32_t value)
676 675
{
677
    if (((T0 >> MSR_IR) & 0x01) != msr_ir ||
678
        ((T0 >> MSR_DR) & 0x01) != msr_dr) {
676
    if (((value >> MSR_IR) & 0x01) != msr_ir ||
677
        ((value >> MSR_DR) & 0x01) != msr_dr) {
679 678
        /* Flush all tlb when changing translation mode or privilege level */
680
        do_tlbia();
679
	tlb_flush(env, 1);
681 680
    }
682 681
    msr_pow = (value >> MSR_POW) & 0x03;
683 682
    msr_ile = (value >> MSR_ILE) & 0x01;
......
931 930
    env->nip = excp << 8;
932 931
    env->exception_index = EXCP_NONE;
933 932
    /* Invalidate all TLB as we may have changed translation mode */
934
    do_tlbia();
933
    tlb_flush(env, 1);
935 934
    /* ensure that no TB jump will be modified as
936 935
       the program flow was changed */
937 936
#ifdef __sparc__
b/target-ppc/op.c
1368 1368
/* fnmadd - fnmadd. - fnmadds - fnmadds. */
1369 1369
PPC_OP(fnmadd)
1370 1370
{
1371
    FT0 = -((FT0 * FT1) + FT2);
1371
    FT0 *= FT1;
1372
    FT0 += FT2;
1373
    FT0 = -FT0;
1372 1374
    RETURN();
1373 1375
}
1374 1376

  
1375 1377
/* fnmadds - fnmadds. */
1376 1378
PPC_OP(fnmadds)
1377 1379
{
1378
    FTS0 = -((FTS0 * FTS1) + FTS2);
1380
    do_fnmadds();
1379 1381
    RETURN();
1380 1382
}
1381 1383

  
1382 1384
/* fnmsub - fnmsub. */
1383 1385
PPC_OP(fnmsub)
1384 1386
{
1385
    FT0 = -((FT0 * FT1) - FT2);
1387
    FT0 *= FT1;
1388
    FT0 -= FT2;
1389
    FT0 = -FT0;
1386 1390
    RETURN();
1387 1391
}
1388 1392

  
1389 1393
/* fnmsubs - fnmsubs. */
1390 1394
PPC_OP(fnmsubs)
1391 1395
{
1392
    FTS0 = -((FTS0 * FTS1) - FTS2);
1396
    do_fnmsubs();
1393 1397
    RETURN();
1394 1398
}
1395 1399

  
b/target-ppc/op_helper.c
267 267
    fesetround(cround);
268 268
}
269 269

  
270
void do_fnmadds (void)
271
{
272
    FTS0 = -((FTS0 * FTS1) + FTS2);
273
}
274

  
275
void do_fnmsubs (void)
276
{
277
    FTS0 = -((FTS0 * FTS1) - FTS2);
278
}
279

  
270 280
void do_fsqrt (void)
271 281
{
272 282
    FT0 = sqrt(FT0);
b/target-ppc/translate.c
276 276
}
277 277

  
278 278
#define GEN_OPCODE(name, op1, op2, op3, invl, _typ)                           \
279
__attribute__ ((section(".opcodes"), unused))                                 \
279
__attribute__ ((section(".opcodes"), unused, aligned (8) ))                   \
280 280
static opcode_t opc_##name = {                                                \
281 281
    .opc1 = op1,                                                              \
282 282
    .opc2 = op2,                                                              \
......
289 289
}
290 290

  
291 291
#define GEN_OPCODE_MARK(name)                                                 \
292
__attribute__ ((section(".opcodes"), unused))                                 \
292
__attribute__ ((section(".opcodes"), unused, aligned (8) ))                   \
293 293
static opcode_t opc_##name = {                                                \
294 294
    .opc1 = 0xFF,                                                             \
295 295
    .opc2 = 0xFF,                                                             \
......
3144 3144
        fprintf(logfile, "---------------- excp: %04x\n", ctx.exception);
3145 3145
        cpu_ppc_dump_state(env, logfile, 0);
3146 3146
        fprintf(logfile, "IN: %s\n", lookup_symbol((void *)pc_start));
3147
#if defined(CONFIG_USER_ONLY)
3147 3148
	disas(logfile, (void *)pc_start, ctx.nip - pc_start, 0, 0);
3149
#endif
3148 3150
        fprintf(logfile, "\n");
3149 3151

  
3150 3152
        fprintf(logfile, "OP:\n");

Also available in: Unified diff