enum reg_class regclass_map[FIRST_PSEUDO_REGISTER] =
{
/* ax, dx, cx, bx */
- AREG, DREG, CREG, Q_REGS,
+ AREG, DREG, CREG, BREG,
/* si, di, bp, sp */
SIREG, DIREG, INDEX_REGS, GENERAL_REGS,
/* FP registers */
in a smaller-numbered class.
For any two classes, it is very desirable that there be another
- class that represents their union. */
-
+ class that represents their union.
+
+ It might seem that class BREG is unnecessary, since no useful 386
+ opcode needs reg %ebx. But some systems pass args to the OS in ebx,
+ and the "b" register constraint is useful in asms for syscalls. */
enum reg_class
{
NO_REGS,
- AREG, DREG, CREG,
+ AREG, DREG, CREG, BREG,
Q_REGS, /* %eax %ebx %ecx %edx */
SIREG, DIREG,
INDEX_REGS, /* %eax %ebx %ecx %edx %esi %edi %ebp */
#define REG_CLASS_NAMES \
{ "NO_REGS", \
- "AREG", "DREG", "CREG", \
+ "AREG", "DREG", "CREG", "BREG", \
"Q_REGS", \
"SIREG", "DIREG", \
"INDEX_REGS", \
#define REG_CLASS_CONTENTS \
{ 0, \
- 0x1, 0x2, 0x4, /* AREG, DREG, CREG */ \
+ 0x1, 0x2, 0x4, 0x8, /* AREG, DREG, CREG, BREG */ \
0xf, /* Q_REGS */ \
0x10, 0x20, /* SIREG, DIREG */ \
0x1007f, /* INDEX_REGS */ \
(C) == 't' ? FP_TOP_REG : \
(C) == 'u' ? FP_SECOND_REG : \
(C) == 'a' ? AREG : \
+ (C) == 'b' ? BREG : \
(C) == 'c' ? CREG : \
(C) == 'd' ? DREG : \
(C) == 'D' ? DIREG : \