> I'm trying to port gcc 4.1 for an architecture that has the following > memory layout BITS_PER_UNIT=32 and UNITS_PER_WORD=1. > It has support (16bit registers and operators) for 16bit signed > atithmetic used mainly for addressing. There are also operators for 32 > bit integer and floating point support. > I set SHORT_TYPE_SIZE=POINTER_SIZE=(BITS_PER_WORD/2). > > I reserved QImode and QFmode for 32 bit integer/floating point operations. > And I defined a new fractional int mode FRACTIONAL_INT_MODE (PQ, 16, 1) for > pointers and short int operations. > When I try to compile a very simple program with short int xgcc > segments for stack overflow because it calls recursively > #32 0x0806dd6d in convert (type=0xb7c7b288, expr=0xb7c88090) at > ../../gcc/c-convert.c:95 > #33 0x08160626 in convert_to_integer (type=0xb7c7b288, > expr=0xb7c88090) at ../../gcc/convert.c:442 > > I presume it tries to convert a small precision mode in something > bigger but I cannot understand why. > This is the first time I try to port gcc, so I don't know if my > assumptions are reasonable or not.
With the caveat that I've never boot-strapped a port myself: - "unit" tends to be an acronym for char, as is QI mode for < 16-bit chars. - "word" tends to be an acronym for int/void*, typically represented as HI (16-bit) or SI (32-bit) mode operands, and typically the natural size of a memory access, although not necessarily. - correspondingly, 32-bit float operands tend to be represented as SF mode operands. (Q = quarter, H = half, S = single, D = Double) (I = integer, F = float) So in rough summary, the following may be reasonable choices (given your machine's apparent support of 16-bit and possibly lesser sized operations): bits mode ~type ---- ---- --------- 8 QI char/short (which can be emulated if necessary) 16 HI char/short/int/void* 16 HF (target-specific-float) 32 SI int/void*/long 32 SF float 64 DI long/void*/long-long/ 64 DF double Also as a generalization, it's likely wise not to try modeling a port after the c4x, as it's implementation seems at best very odd. (alternatively, a better model may be one of the supported 16/32 bit targets, depending on your machine's architecture.) best of luck.