rizin/test/db/analysis/tms320
Anton Kochkov ab201a3843 arch/tms320: TMS320C55x+ analysis & RzIL (PR #6434) + extended lifter coverage
Squash of rizinorg/rizin PR #6434 ("improve TMS320C55x+ analysis and RzIL")
rebased onto dev, with the PR head's doubled c55plus_il.c (every symbol defined
twice, failing to compile) de-duplicated to a single clean copy.

Substantially extends the C55x/C55x+ RzIL lifter over the existing structured-
operand helpers: mov/copy (immediate, register, memory load/store, half-register
read-modify-write), the full addressing-mode set with post-modify side effects,
control and system-register moves, 40-bit accumulator ALU with shifted sources,
16-bit and dual-memory add/sub, the ST0_55 status-flag model (cmp/cmpand/rol/ror,
named-bit bset/bclr), a documented psh/pop stack model, address-unit amov/aadd/
asub and amar, and bcc/callcc control transfer. The multiply/MAC family and satr
are lifted with explicit, documented integer-mode approximations (not verified
DSP semantics); irreducibly multi-output primitives (bit counts, Viterbi, FIR,
distance) are left correct-or-NULL. The register file covers ac0-7 and xar, found
by validating on real Motorola Wrigley C55x+ firmware whose prologues save 40-bit
accumulators as dbl(acN)+acN.g pairs.

Adds RzIL-VM emulation tests (including the C55x and C55x+ _decrypt emulateme
binaries), per-instruction IL assertions, and ~95% instruction-class disassembly
coverage per corpus; pins little-endian in the VM tests for big-endian hosts; and
regenerates the analysis expectations against current dev.
2026-06-15 23:31:05 +08:00

111 lines
4 KiB
Text

NAME=arp TMS320 c55x
FILE==
CMDS=<<EOF
e asm.arch=tms320
e analysis.arch=tms320
e analysis.cpu=c55x
arp
ar
EOF
EXPECT=<<EOF
=PC pc
=A0 ar0
=A1 ar1
=A2 ar2
=A3 ar3
=A4 ar4
=R0 ar0
ctr ac0 .40 496 0 # Accumulator 0
ctr ac1 .40 501 0 # Accumulator 1
ctr ac2 .40 506 0 # Accumulator 2
ctr ac3 .40 511 0 # Accumulator 3
gpr ar0 .16 516 0 # Auxiliary registers 0
gpr ar1 .16 518 0 # Auxiliary registers 1
gpr ar2 .16 520 0 # Auxiliary registers 2
gpr ar3 .16 522 0 # Auxiliary registers 3
gpr ar4 .16 524 0 # Auxiliary registers 4
gpr ar5 .16 526 0 # Auxiliary registers 5
gpr ar6 .16 528 0 # Auxiliary registers 6
gpr ar7 .16 530 0 # Auxiliary registers 7
gpr xar0 .23 532 0 # Extended auxiliary registers 0
gpr xar1 .23 535 0 # Extended auxiliary registers 1
gpr xar2 .23 538 0 # Extended auxiliary registers 2
gpr xar3 .23 541 0 # Extended auxiliary registers 3
gpr xar4 .23 544 0 # Extended auxiliary registers 4
gpr xar5 .23 547 0 # Extended auxiliary registers 5
gpr xar6 .23 550 0 # Extended auxiliary registers 6
gpr xar7 .23 553 0 # Extended auxiliary registers 7
ctr bk03 .16 556 0 # Circular buffer size registers
ctr bk47 .16 558 0 # Circular buffer size registers
ctr bkc .16 560 0 # Circular buffer size registers
ctr brc0 .16 562 0 # Block-repeat counters 0
ctr brc1 .16 564 0 # Block-repeat counters 1
ctr brs1 .16 566 0 # BRC1 save register
ctr bsa01 .16 568 0 # Circular buffer start address registers
ctr bsa23 .16 570 0 # Circular buffer start address registers
ctr bsa45 .16 572 0 # Circular buffer start address registers
ctr bsa67 .16 574 0 # Circular buffer start address registers
ctr bsac .16 576 0 # Circular buffer start address registers
ctr cdp .16 578 0 # Coefficient data pointer (low part of XCDP)
ctr cdph .7 580 0 # High part of XCDP
ctr cfct .8 581 0 # Control-flow context register
ctr csr .16 582 0 # Computed single-repeat register
ctr dbier0 .16 584 0 # Debug interrupt enable registers 0
ctr dbier1 .16 586 0 # Debug interrupt enable registers 1
ctr dp .16 588 0 # Data page register (low part of XDP)
ctr dph .7 590 0 # High part of XDP
ctr ier0 .16 591 0 # Interrupt enable registers 0
ctr ier1 .16 593 0 # Interrupt enable registers 1
ctr ifr0 .16 595 0 # Interrupt flag registers 0
ctr ifr1 .16 597 0 # Interrupt flag registers 1
ctr ivpd .16 599 0 # Interrupt vector pointers
ctr ivph .16 601 0 # Interrupt vector pointers
ctr pc .24 603 0 # Program counter
ctr pdp .9 606 0 # Peripheral data page register
ctr rea0 .24 608 0 # Block-repeat end address registers 0
ctr rea1 .24 611 0 # Block-repeat end address registers 1
ctr reta .24 614 0 # Return address register
ctr rptc .16 617 0 # Single-repeat counter
ctr rsa0 .24 619 0 # Block-repeat start address registers 0
ctr rsa1 .24 622 0 # Block-repeat start address registers 1
ctr sp .16 625 0 # Data stack pointer (low part of XSP)
ctr sph .7 627 0 # High part of XSP and XSSP
ctr ssp .16 628 0 # System stack pointer (low part of XSSP)
ctr st0_55 .16 630 0 # Status registers 0
ctr st1_55 .16 632 0 # Status registers 1
ctr st2_55 .16 634 0 # Status registers 2
ctr st3_55 .16 636 0 # Status registers 3
ctr t0 .16 638 0 # Temporary register 0
ctr t1 .16 640 0 # Temporary register 1
ctr t2 .16 642 0 # Temporary register 2
ctr t3 .16 644 0 # Temporary register 3
ctr trn0 .16 646 0 # Transition registers 1
ctr trn1 .16 648 0 # Transition registers 1
ctr xcdp .23 650 0 # Extended coefficient data pointer
ctr xdp .23 653 0 # Extended data page register
ctr xsp .23 656 0 # Extended data stack pointer
ctr xssp .23 659 0 # Extended system stack pointer
ctr ac4 .40 664 0 # Accumulator 4
ctr ac5 .40 669 0 # Accumulator 5
ctr ac6 .40 674 0 # Accumulator 6
ctr ac7 .40 679 0 # Accumulator 7
ar0 = 0x0000
ar1 = 0x0000
ar2 = 0x0000
ar3 = 0x0000
ar4 = 0x0000
ar5 = 0x0000
ar6 = 0x0000
ar7 = 0x0000
xar0 = 0x000000
xar1 = 0x000000
xar2 = 0x000000
xar3 = 0x000000
xar4 = 0x000000
xar5 = 0x000000
xar6 = 0x000000
xar7 = 0x000000
EOF
RUN