This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[m68k] RAMBAR confusion


The ColdFire chips can have RAMBAR0 and/or RAMBAR1 control registers. these are numbered c04 and c05.

When only one is implemented, it is referred to as 'RAMBAR' in the ColdFire documentation. Unfortunately, some ColdFire CPUs call 0xc04 RAMBAR and others call 0xc05 RAMBAR :(

This patch fixes things up so that
1) We always have a 'RAMBAR' register, this maps onto 0xc04 or 0xc05 as appropriate for the particular CPU. Thus matching the documentation.


2) We always disassemble as RAMBAR0 and RAMBAR1, to be unambiguous.

3) Fixes some CPUs where we had the wrong settings.

built and tested on m68k-elf, ok?

nathan
--
Nathan Sidwell    ::   http://www.codesourcery.com   ::         CodeSourcery
nathan@codesourcery.com    ::     http://www.planetfall.pwp.blueyonder.co.uk

2007-04-13  Nathan Sidwell  <nathan@codesourcery.com>

	gas/
	* config/m68k-parse.h (RAMBAR_ALT): New.
	* config/tc-m68k.c (mcf5206_ctrl, mcf5307_ctrl): New.
	(mcf_ctrl, mcf5208_ctrl, mcf5210a_ctrl, mcf5213_ctrl, mcf52235_ctrl,
	mcf5225_ctrl, mcf5235_ctrl, mcf5271_ctrl, mcf5275_ctrl,
	mcf5282_ctrl, mcf5329_ctrl, mcf5373_ctrl, mcfv4e_ctrl,
	mcf5475_ctrl, mcf5485_ctrl): Add RAMBAR synonym for
	RAMBAR1.
	(mcf5272_ctrl): Add RAMBAR0, replace add RAMBAR with RAMBAR_ALT.
	(m68k_cpus): Adjust 5206, 5206e & 5307 entries.
	(m68k_ip) <Case J>: Detect when RAMBAR_ALT should be used.  Add it
	to control register mapping.

	gas/testsuite/
	* gas/m68k/ctrl-1.d, gas/m68k/ctrl-1.s: New.
	* gas/m68k/ctrl-2.d, gas/m68k/ctrl-2.s: New.
	* gas/m68k/all.exp: Add them.

	opcodes/
	* m68k-dis.c (print_insn_arg): Show c04 as rambar0 and c05 as
	rambar1.

Index: gas/config/m68k-parse.h
===================================================================
RCS file: /cvs/src/src/gas/config/m68k-parse.h,v
retrieving revision 1.11
diff -c -3 -p -r1.11 m68k-parse.h
*** gas/config/m68k-parse.h	15 Feb 2007 18:37:08 -0000	1.11
--- gas/config/m68k-parse.h	13 Apr 2007 11:11:56 -0000
*************** enum m68k_register
*** 113,118 ****
--- 113,120 ----
    BUSCR,			/* 68060 added these.  */
    PCR,
    ROMBAR,			/* mcf5200 added these.  */
+   RAMBAR_ALT,			/* Some CF chips have RAMBAR using
+ 				   RAMBAR0's number */
    RAMBAR0,
    RAMBAR1,
    MMUBAR,			/* mcfv4e added these.  */
Index: gas/config/tc-m68k.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-m68k.c,v
retrieving revision 1.86
diff -c -3 -p -r1.86 tc-m68k.c
*** gas/config/tc-m68k.c	4 Apr 2007 22:10:34 -0000	1.86
--- gas/config/tc-m68k.c	13 Apr 2007 11:12:00 -0000
*************** static const enum m68k_register m68060_c
*** 173,211 ****
  };
  static const enum m68k_register mcf_ctrl[] = {
    CACR, TC, ACR0, ACR1, ACR2, ACR3, VBR, ROMBAR,
!   RAMBAR0, RAMBAR1, MBAR,
    0
  };
  static const enum m68k_register mcf5208_ctrl[] = {
!   CACR, ACR0, ACR1, VBR, RAMBAR1,
    0
  };
  static const enum m68k_register mcf5210a_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, ROMBAR, RAMBAR, MBAR,
    0
  };
  static const enum m68k_register mcf5213_ctrl[] = {
!   VBR, RAMBAR, FLASHBAR,
    0
  };
  static const enum m68k_register mcf5216_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, FLASHBAR, RAMBAR,
    0
  };
  static const enum m68k_register mcf52235_ctrl[] = {
!   VBR, FLASHBAR, RAMBAR,
    0
  };
  static const enum m68k_register mcf5225_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, FLASHBAR, RAMBAR, MBAR,
    0
  };
  static const enum m68k_register mcf5235_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, RAMBAR,
    0
  };
  static const enum m68k_register mcf5249_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, RAMBAR0, RAMBAR1, MBAR, MBAR2,
    0
  };
  static const enum m68k_register mcf5250_ctrl[] = {
--- 173,215 ----
  };
  static const enum m68k_register mcf_ctrl[] = {
    CACR, TC, ACR0, ACR1, ACR2, ACR3, VBR, ROMBAR,
!   RAMBAR0, RAMBAR1, RAMBAR, MBAR,
!   0
! };
! static const enum m68k_register mcf5206_ctrl[] = {
!   CACR, ACR0, ACR1,  VBR, RAMBAR0, RAMBAR_ALT, MBAR,
    0
  };
  static const enum m68k_register mcf5208_ctrl[] = {
!   CACR, ACR0, ACR1, VBR,  RAMBAR, RAMBAR1,
    0
  };
  static const enum m68k_register mcf5210a_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, ROMBAR, RAMBAR, RAMBAR1, MBAR,
    0
  };
  static const enum m68k_register mcf5213_ctrl[] = {
!   VBR, RAMBAR, RAMBAR1, FLASHBAR,
    0
  };
  static const enum m68k_register mcf5216_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, FLASHBAR, RAMBAR, RAMBAR1,
    0
  };
  static const enum m68k_register mcf52235_ctrl[] = {
!   VBR, FLASHBAR, RAMBAR, RAMBAR1,
    0
  };
  static const enum m68k_register mcf5225_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, FLASHBAR, RAMBAR, MBAR, RAMBAR1,
    0
  };
  static const enum m68k_register mcf5235_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, RAMBAR, RAMBAR1,
    0
  };
  static const enum m68k_register mcf5249_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, RAMBAR0, RAMBAR1, RAMBAR, MBAR, MBAR2,
    0
  };
  static const enum m68k_register mcf5250_ctrl[] = {
*************** static const enum m68k_register mcf5250_
*** 213,239 ****
    0
  };
  static const enum m68k_register mcf5271_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, RAMBAR,
    0
  };
  static const enum m68k_register mcf5272_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, ROMBAR, RAMBAR, MBAR,
    0
  };
  static const enum m68k_register mcf5275_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, RAMBAR,
    0
  };
  static const enum m68k_register mcf5282_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, FLASHBAR, RAMBAR,
    0
  };
  static const enum m68k_register mcf5329_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, RAMBAR,
    0
  };
  static const enum m68k_register mcf5373_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, RAMBAR,
    0
  };
  static const enum m68k_register mcfv4e_ctrl[] = {
--- 217,247 ----
    0
  };
  static const enum m68k_register mcf5271_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, RAMBAR, RAMBAR1,
    0
  };
  static const enum m68k_register mcf5272_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, ROMBAR, RAMBAR_ALT, RAMBAR0, MBAR,
    0
  };
  static const enum m68k_register mcf5275_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, RAMBAR, RAMBAR1,
    0
  };
  static const enum m68k_register mcf5282_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, FLASHBAR, RAMBAR, RAMBAR1,
!   0
! };
! static const enum m68k_register mcf5307_ctrl[] = {
!   CACR, ACR0, ACR1,  VBR, RAMBAR0, RAMBAR_ALT, MBAR,
    0
  };
  static const enum m68k_register mcf5329_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, RAMBAR, RAMBAR1,
    0
  };
  static const enum m68k_register mcf5373_ctrl[] = {
!   VBR, CACR, ACR0, ACR1, RAMBAR, RAMBAR1,
    0
  };
  static const enum m68k_register mcfv4e_ctrl[] = {
*************** static const enum m68k_register mcfv4e_c
*** 249,255 ****
    TC /* ASID */, BUSCR /* MMUBAR */,
    ITT0 /* ACR0 */, ITT1 /* ACR1 */, DTT0 /* ACR2 */, DTT1 /* ACR3 */,
    MBAR1 /* MBAR */, MBAR2 /* SECMBAR */, MBAR0 /* SECMBAR */,
!   ROMBAR /* ROMBAR0 */,
    0
  };
  static const enum m68k_register mcf5475_ctrl[] = {
--- 257,263 ----
    TC /* ASID */, BUSCR /* MMUBAR */,
    ITT0 /* ACR0 */, ITT1 /* ACR1 */, DTT0 /* ACR2 */, DTT1 /* ACR3 */,
    MBAR1 /* MBAR */, MBAR2 /* SECMBAR */, MBAR0 /* SECMBAR */,
!   ROMBAR /* ROMBAR0 */, RAMBAR /* RAMBAR1 */,
    0
  };
  static const enum m68k_register mcf5475_ctrl[] = {
*************** static const enum m68k_register mcf5475_
*** 258,264 ****
    /* Legacy names */
    TC /* ASID */, BUSCR /* MMUBAR */,
    ITT0 /* ACR0 */, ITT1 /* ACR1 */, DTT0 /* ACR2 */, DTT1 /* ACR3 */,
!   MBAR1 /* MBAR */, ROMBAR /* ROMBAR0 */,
    0
  };
  static const enum m68k_register mcf5485_ctrl[] = {
--- 266,272 ----
    /* Legacy names */
    TC /* ASID */, BUSCR /* MMUBAR */,
    ITT0 /* ACR0 */, ITT1 /* ACR1 */, DTT0 /* ACR2 */, DTT1 /* ACR3 */,
!   MBAR1 /* MBAR */, RAMBAR /* RAMBAR1 */,
    0
  };
  static const enum m68k_register mcf5485_ctrl[] = {
*************** static const enum m68k_register mcf5485_
*** 267,273 ****
    /* Legacy names */
    TC /* ASID */, BUSCR /* MMUBAR */,
    ITT0 /* ACR0 */, ITT1 /* ACR1 */, DTT0 /* ACR2 */, DTT1 /* ACR3 */,
!   MBAR1 /* MBAR */, ROMBAR /* ROMBAR0 */,
    0
  };
  static const enum m68k_register fido_ctrl[] = {
--- 275,281 ----
    /* Legacy names */
    TC /* ASID */, BUSCR /* MMUBAR */,
    ITT0 /* ACR0 */, ITT1 /* ACR1 */, DTT0 /* ACR2 */, DTT1 /* ACR3 */,
!   MBAR1 /* MBAR */, RAMBAR /* RAMBAR1 */,
    0
  };
  static const enum m68k_register fido_ctrl[] = {
*************** static const struct m68k_cpu m68k_cpus[]
*** 530,538 ****
    {mcfisa_a,					mcf_ctrl, "5200", 0},
    {mcfisa_a,					mcf_ctrl, "5202", 1},
    {mcfisa_a,					mcf_ctrl, "5204", 1},
!   {mcfisa_a,					mcf_ctrl, "5206", 1},
    
!   {mcfisa_a|mcfhwdiv|mcfmac,			mcf_ctrl, "5206e", 0},
    
    {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp,	mcf5208_ctrl, "5207", -1},
    {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp,	mcf5208_ctrl, "5208", 0},
--- 538,546 ----
    {mcfisa_a,					mcf_ctrl, "5200", 0},
    {mcfisa_a,					mcf_ctrl, "5202", 1},
    {mcfisa_a,					mcf_ctrl, "5204", 1},
!   {mcfisa_a,					mcf5206_ctrl, "5206", 1},
    
!   {mcfisa_a|mcfhwdiv|mcfmac,			mcf5206_ctrl, "5206e", 0},
    
    {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp,	mcf5208_ctrl, "5207", -1},
    {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp,	mcf5208_ctrl, "5208", 0},
*************** static const struct m68k_cpu m68k_cpus[]
*** 578,584 ****
    {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp,	mcf5282_ctrl, "5282", -1},
    {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp,	mcf5282_ctrl, "528x", 0},
    
!   {mcfisa_a|mcfhwdiv|mcfmac,			mcf_ctrl, "5307", 0},
    
    {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp,	mcf5329_ctrl, "5327", -1},
    {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp,	mcf5329_ctrl, "5328", -1},
--- 586,592 ----
    {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp,	mcf5282_ctrl, "5282", -1},
    {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp,	mcf5282_ctrl, "528x", 0},
    
!   {mcfisa_a|mcfhwdiv|mcfmac,			mcf5307_ctrl, "5307", 0},
    
    {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp,	mcf5329_ctrl, "5327", -1},
    {mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp,	mcf5329_ctrl, "5328", -1},
*************** m68k_ip (char *instring)
*** 1743,1750 ****
  		      const enum m68k_register *rp;
  		      
  		      for (rp = control_regs; *rp; rp++)
! 			if (*rp == opP->reg)
! 			  break;
  		      if (*rp == 0)
  			losing++;
  		    }
--- 1751,1768 ----
  		      const enum m68k_register *rp;
  		      
  		      for (rp = control_regs; *rp; rp++)
! 			{
! 			  if (*rp == opP->reg)
! 			    break;
! 			  /* In most CPUs RAMBAR refers to control reg
! 	     	 	     c05 (RAMBAR1), but a few CPUs have it
! 	     	 	     refer to c04 (RAMBAR0).  */
! 			  else if (*rp == RAMBAR_ALT && opP->reg == RAMBAR)
! 			    {
! 			      opP->reg = RAMBAR_ALT;
! 			      break;
! 			    }
! 			}
  		      if (*rp == 0)
  			losing++;
  		    }
*************** m68k_ip (char *instring)
*** 3075,3080 ****
--- 3093,3099 ----
                break;
  	    case FLASHBAR:
  	    case RAMBAR0:
+ 	    case RAMBAR_ALT:
  	      tmpreg = 0xC04;
  	      break;
  	    case RAMBAR:
Index: gas/testsuite/gas/m68k/all.exp
===================================================================
RCS file: /cvs/src/src/gas/testsuite/gas/m68k/all.exp,v
retrieving revision 1.11
diff -c -3 -p -r1.11 all.exp
*** gas/testsuite/gas/m68k/all.exp	4 Jan 2007 17:14:50 -0000	1.11
--- gas/testsuite/gas/m68k/all.exp	13 Apr 2007 11:12:03 -0000
*************** if { [istarget m68*-*-*] || [istarget fi
*** 52,57 ****
--- 52,60 ----
      run_dump_test arch-cpu-1
      run_dump_test cpu32
  
+     run_dump_test ctrl-1
+     run_dump_test ctrl-2
+ 
      set testname "68000 operands"
      gas_run "operands.s" "-m68000" "2>err.out"
      if ![string match "child process exited abnormally" $comp_output] then {
Index: opcodes/m68k-dis.c
===================================================================
RCS file: /cvs/src/src/opcodes/m68k-dis.c,v
retrieving revision 1.25
diff -c -3 -p -r1.25 m68k-dis.c
*** opcodes/m68k-dis.c	9 Apr 2007 17:09:56 -0000	1.25
--- opcodes/m68k-dis.c	13 Apr 2007 11:12:05 -0000
*************** print_insn_arg (const char *d,
*** 645,651 ****
               {"%dtt0",0x006}, {"%dtt1",0x007}, {"%buscr",0x008},
  	     {"%usp", 0x800}, {"%vbr", 0x801}, {"%caar", 0x802},
  	     {"%msp", 0x803}, {"%isp", 0x804},
! 	     {"%flashbar", 0xc04}, {"%rambar", 0xc05}, /* mcf528x added these.  */
  
  	     /* Should we be calling this psr like we do in case 'Y'?  */
  	     {"%mmusr",0x805},
--- 645,653 ----
               {"%dtt0",0x006}, {"%dtt1",0x007}, {"%buscr",0x008},
  	     {"%usp", 0x800}, {"%vbr", 0x801}, {"%caar", 0x802},
  	     {"%msp", 0x803}, {"%isp", 0x804},
! 	     /* reg c04 is sometimes called flashbar or rambar.
! 		rec c05 is also sometimes called rambar.  */
! 	     {"%rambar0", 0xc04}, {"%rambar1", 0xc05},
  
  	     /* Should we be calling this psr like we do in case 'Y'?  */
  	     {"%mmusr",0x805},

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]