trunk/src/emu/cpu/arcompact/arcompact_execute.c
| r242598 | r242599 | |
| 2440 | 2440 | } |
| 2441 | 2441 | |
| 2442 | 2442 | |
| 2443 | | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0d_00(OPS_16) // ADD_S c, b, u3 (note, c destination) |
| 2444 | | { |
| 2445 | | int u, breg, creg; |
| 2446 | 2443 | |
| 2447 | | COMMON16_GET_u3; |
| 2448 | | COMMON16_GET_breg; |
| 2449 | | COMMON16_GET_creg; |
| 2450 | | |
| 2451 | | REG_16BIT_RANGE(breg); |
| 2452 | | REG_16BIT_RANGE(creg); |
| 2453 | | |
| 2454 | | m_regs[creg] = m_regs[breg] + u; |
| 2455 | | |
| 2456 | | return m_pc + (2 >> 0); |
| 2457 | | } |
| 2458 | | |
| 2459 | | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0d_01(OPS_16) |
| 2460 | | { |
| 2461 | | return arcompact_handle0d_helper(PARAMS, "SUB_S"); |
| 2462 | | } |
| 2463 | | |
| 2464 | | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0d_02(OPS_16) // ASL_S c, b asl u3 (note, c destination) |
| 2465 | | { |
| 2466 | | int u, breg, creg; |
| 2467 | | |
| 2468 | | COMMON16_GET_u3; |
| 2469 | | COMMON16_GET_breg; |
| 2470 | | COMMON16_GET_creg; |
| 2471 | | |
| 2472 | | REG_16BIT_RANGE(breg); |
| 2473 | | REG_16BIT_RANGE(creg); |
| 2474 | | |
| 2475 | | m_regs[creg] = m_regs[breg] << u; |
| 2476 | | |
| 2477 | | return m_pc + (2 >> 0); |
| 2478 | | } |
| 2479 | | |
| 2480 | 2444 | ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0d_03(OPS_16) |
| 2481 | 2445 | { |
| 2482 | 2446 | return arcompact_handle0d_helper(PARAMS, "ASR_S"); |
trunk/src/emu/cpu/arcompact/arcompact_make.py
| r242598 | r242599 | |
| 286 | 286 | print >>f, "" |
| 287 | 287 | print >>f, "" |
| 288 | 288 | |
| 289 | |
| 290 | # xxx_S c, b, u3 format opcodes (note c is destination) |
| 291 | def EmitGroup0d(f,funcname, opname, opexecute, opwrite): |
| 292 | print >>f, "ARCOMPACT_RETTYPE arcompact_device::arcompact_handle%s(OPS_16)" % (funcname) |
| 293 | print >>f, "{" |
| 294 | print >>f, " int u, breg, creg;" |
| 295 | print >>f, "" |
| 296 | print >>f, " COMMON16_GET_u3;" |
| 297 | print >>f, " COMMON16_GET_breg;" |
| 298 | print >>f, " COMMON16_GET_creg;" |
| 299 | print >>f, "" |
| 300 | print >>f, " REG_16BIT_RANGE(breg);" |
| 301 | print >>f, " REG_16BIT_RANGE(creg);" |
| 302 | print >>f, "" |
| 303 | print >>f, " %s" % (opexecute) |
| 304 | print >>f, " %s" % (opwrite) |
| 305 | print >>f, "" |
| 306 | print >>f, " return m_pc + (2 >> 0);" |
| 307 | print >>f, "}" |
| 308 | |
| 309 | |
| 289 | 310 | # xxx_S b <- b,c format opcodes |
| 290 | 311 | def EmitGroup0f(f,funcname, opname, opexecute, opwrite): |
| 291 | 312 | print >>f, "ARCOMPACT_RETTYPE arcompact_device::arcompact_handle%s(OPS_16)"% (funcname) |
| r242598 | r242599 | |
| 368 | 389 | EmitGroup04(f, "04_2f_07", "EXTB", "UINT32 result = c & 0x000000ff;", "m_regs[breg] = result;","", 2,1, -1, EmitGroup04_unsupported_Flags ) # ^ |
| 369 | 390 | EmitGroup04(f, "04_2f_08", "EXTW", "UINT32 result = c & 0x0000ffff;", "m_regs[breg] = result;","", 2,1, -1, EmitGroup04_unsupported_Flags ) # ^ |
| 370 | 391 | |
| 392 | # xxx_S c, b, u3 format opcodes (note c is destination) |
| 393 | EmitGroup0d(f, "0d_00", "ADD_S", "UINT32 result = m_regs[breg] + u;", "m_regs[creg] = result;" ) |
| 394 | EmitGroup0d(f, "0d_01", "SUB_S", "UINT32 result = m_regs[breg] - u;", "m_regs[creg] = result;" ) |
| 395 | EmitGroup0d(f, "0d_02", "ASL_S", "UINT32 result = m_regs[breg] << u;", "m_regs[creg] = result;" ) |
| 396 | |
| 371 | 397 | # xxx_S b <- b,c format opcodes (or in some cases xxx_S b,c) |
| 372 | 398 | EmitGroup0f(f, "0f_02", "SUB_S", "UINT32 result = m_regs[breg] - m_regs[creg];", "m_regs[breg] = result;" ) |
| 373 | 399 | EmitGroup0f(f, "0f_04", "AND_S", "UINT32 result = m_regs[breg] & m_regs[creg];", "m_regs[breg] = result;" ) |