Hi DJ, There is a error in the RL78 G13 hardware manual. Section 14, Figure 14-3 lists the values of the MDBL registers as FFFF4H, FFFF5H and the MDBH registers as FFFF6H, FFFF7H. This is incorrect. The correct values are shown in Section 3, Table 3-5: MDBL => FFFF6H, FFFF7H, MDBH => FFFF4H, FFFF5H.
GCC and the RL78 simulator currently use the values from section 14. The patch below corrects GCC. A similar patch will be submitted to update the sim. Tested with no regressions (on an updated sim) using an rl78-elf toolchain. OK to apply ? Cheers Nick gcc/ChangeLog 2013-01-03 Nick Clifton <ni...@redhat.com> * config/rl78/rl78.md (mulsi3_g13): Correct values for MDBL and MDBH registers. Index: gcc/config/rl78/rl78.md =================================================================== --- gcc/config/rl78/rl78.md (revision 194833) +++ gcc/config/rl78/rl78.md (working copy) @@ -273,10 +273,10 @@ ) ;; 0xFFFF0 is MDAL. 0xFFFF2 is MDAH. -;; 0xFFFF4 is MDBL. 0xFFFF6 is MDBH. +;; 0xFFFF6 is MDBL. 0xFFFF4 is MDBH. ;; 0xF00E0 is MDCL. 0xF00E2 is MDCH. ;; 0xF00E8 is MDUC. -;; Warning: this matches the documentation, not the silicon. +;; Warning: this matches the silicon not the documentation. (define_insn "mulsi3_g13" [(set (match_operand:SI 0 "register_operand" "=&v") (mult:SI (match_operand:SI 1 "nonmemory_operand" "vi") @@ -291,12 +291,12 @@ movw ax, %h2 movw 0xffff2, ax ; MDAH nop ; mdb = mdal * mdah - movw ax, 0xffff4 ; MDBL + movw ax, 0xffff6 ; MDBL movw %h0, ax mov a, #0x40 mov !0xf00e8, a ; MDUC - movw ax, 0xffff6 ; MDBH + movw ax, 0xffff4 ; MDBH movw !0xf00e0, ax ; MDCL movw ax, #0 movw !0xf00e2, ax ; MDCL