🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: gnu.gdb.bug
Article #604

m-sun3.h

#604
From: Alain Brossard
Date: Tue, 11 Oct 1988 14:43
61 lines
2533 bytes
	I'm porting gdb to a system using a 68020 with a floating point
chip (68881) on board.  Going through the file m-sun3.h which has the
same hardware characteristics I think I've spotted a few incorrect
assumptions regarding the 68020 and the 68881:

    The status register (SP_REGNUM) is only 2 bytes long and pushed on
the stack that way by the 68020 when it encounters an exception
(or interrupt).

    REGISTER_NAMES:
  "fpcontrol", "fpstatus", "fpiaddr", "fpcode", "fpflags" }
  
    The 68881 has 3 control registers and not 5, am I to assume that
two of those are specific to the Sun?

/* Number of bytes of storage in the actual machine representation
   for register N.  On the 68000, all regs are 4 bytes
   except the floating point regs which are 12 bytes.  */

#define REGISTER_RAW_SIZE(N) (((unsigned)(N) - FP0_REGNUM) < 8 ? 12 : 4)

   Again this is incorrect for the status register and for all normal
68020 registers if I read this correctly: all registers lower than FP8
are assumed to be size 12, which is obviously incorrect.  Here is my
corrected version:

#define REGISTER_RAW_SIZE(N) \
    (unsigned(N) == PS_REGNUM ? 2 : ((unsigned)(N) < FP0_REGNUM) ? 4 : \
    ((unsigned)(N) < FPC_REGNUM ? 12 : 4)

   Same thing about the following two:

#define REGISTER_BYTE(N)  \
 ((N) >= FPC_REGNUM ? (((N) - FPC_REGNUM) * 4) + 166    \
  : (N) >= FP0_REGNUM ? (((N) - FP0_REGNUM) * 12) + 70  \
  : ( (N) <= PS_REGNUM ? (N) * 4 : (N) * 4 - 2))

#define REGISTER_VIRTUAL_SIZE(N) \
    (unsigned(N) == PS_REGNUM ? 2 : ((unsigned)(N) < FP0_REGNUM) ? 4 : \
    ((unsigned)(N) < FPC_REGNUM ? 8 : 4)

   Also wrong is:
#define REGISTER_CONVERTIBLE(N) (((unsigned)(N) - FP0_REGNUM) < 8)
   Since the non floating point registers don't need to be converted.

#define REGISTER_VIRTUAL_TYPE(N) \
 (((unsigned)(N) - FP0_REGNUM) < 8 ? builtin_type_double : builtin_type_int)
 	(same incorrect test)



					Alain Brossard

vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

Alain Brossard, CS Dept., U. Waterloo, Waterloo, Ontario, Canada N2L 3G1
INTERNET:abrossard@watcgl.uwaterloo.ca
INTERNET:abrossard@watcgl.waterloo.edu
UUCP :uunet!watmath!watcgl!abrossard
EAN :abrossard@cgl.waterloo.cdn
Technical Details
Message-ID: <6239@watcgl.waterloo.edu>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!water!watmath!watcgl!abrossard

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!water!watmath!watcgl!abrossard
From: abrossard@watcgl.waterloo.edu (Alain Brossard)
Newsgroups: gnu.gdb.bug
Subject: m-sun3.h
Message-ID: <6239@watcgl.waterloo.edu>
Date: 11 Oct 88 14:43:08 GMT
Organization: U of Waterloo, Ontario
Lines: 61