I am tracking a bug, not sure whether it is a generic GCC bug or my porting
goes wrong.
To access the below structure,
typedef struct {
long int p_x, p_y;
} Point;
...
p1.p_x = -1;
...
It is expanded to follwing RTL
;; p1.p_x = -1;
(insn 19 18 20
/projects/firepath/tools/work/bmei/gcc-head/src/gcc/testsuite/gcc.c-torture/execute/20000808-1.c:14
(set (reg:DI 98)
(ior:DI (reg/v:DI 87 [ p1 ])
(const_int -1 [0xffffffff]))) -1 (nil))
(insn 20 19 0
/projects/firepath/tools/work/bmei/gcc-head/src/gcc/testsuite/gcc.c-torture/execute/20000808-1.c:14
(set (reg/v:DI 87 [ p1 ])
(reg:DI 98)) -1 (nil))
According to your explaination, (reg:DI 98) will get -1 (0xffffffffffffffff)
after insn 19, and is wrong. Am I right?
Thanks,
Bingfeng
> -----Original Message-----
> From: Dave Korn [mailto:[email protected]]
> Sent: 12 March 2009 17:53
> To: Bingfeng Mei
> Cc: [email protected]
> Subject: Re: Is const_int zero extended or sign-extended?
>
> Bingfeng Mei wrote:
> > Hello, I am confused by one very basic concept :). In the
> following rtx
> > expression, if const_int is 32-bit and DImode is 64-bit,
> will the const_int
> > sign-extended or zero-extended. In other word, is the
> content of reg:DI 95
> > 0xffffffffffffffff9 or 0xffffffff9 after this instruction?
> >
> > (set:DI (reg:DI 95) (const_int -7 [0xfffffff9]))
> >
> > Thanks, Bingfeng Mei
> >
>
> IIUC in the absence of any explicit extension operation, a
> const_int is
> taken to be whatever size the object it is assigned to, with
> the value given
> by the signed decimal interpretation. That RTL sets reg 95
> to a DImode -7.
>
> Is this part of a larger problem?
>
> cheers,
> DaveK
>
>