tinycc-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Tinycc-devel] __asm__ "unknown constraint 't'" issue


From: Thomas Preud'homme
Subject: Re: [Tinycc-devel] __asm__ "unknown constraint 't'" issue
Date: Wed, 06 Aug 2014 23:04:03 +0800
User-agent: KMail/4.12.4 (Linux/3.14-2-amd64; KDE/4.13.3; x86_64; ; )

Le mercredi 06 août 2014, 18:40:19 Roy Tam a écrit :
> Hello,
> 
> 2014-08-06 18:27 GMT+08:00 YX Hao <address@hidden>:
> > Hi there,
> > 
> > Here is what I found:
> > 
> > ----------------------------------------
> > math.h:341: error: unknown constraint 't'
> > ----------------------------------------
> > 
> > And more around this line.
> > 
> > I know little about asm. Can somebody take a look at it?
> 
> I have a little patch for that, someone please review it.
> Thank you.

Note that i386-asm.c is probably one of the piece of tcc I know the least (I 
think it comes second after the Windows stuff). If you are still interested in 
my review, see below.

> 
> diff --git a/i386-asm.c b/i386-asm.c
> index 664aade..1a24e30 100644
> --- a/i386-asm.c
> +++ b/i386-asm.c
> @@ -1029,6 +1029,9 @@ static inline int constraint_priority(const char *str)
> case 'i':
>          case 'm':
>          case 'g':
> +        case 'f':
> +        case 't':
> +        case 'u':
>              pr = 4;
>              break;
>          default:

It would be nice if you take advantage of your patch to sort this block as 
with LC_COLLATE=C (f, i, g, m, t, u, I, N, M). I can't comment on the priority 
though, I didn't know about the priority between constraints.


> @@ -1211,6 +1214,11 @@ ST_FUNC void asm_compute_constraints(ASMOperand
> *operands,
>              if (!((op->vt->r & (VT_VALMASK | VT_LVAL | VT_SYM)) ==
> VT_CONST)) goto try_next;
>              break;
> +        case 'f':
> +        case 't':
> +        case 'u':
> +            /* float */
> +            break;
>          case 'm':
>          case 'g':
>              /* nothing special to do because the operand is already in

As I said I'm not a specialist of this code but it seems to me that 't' should 
do reg = TREG_ST0, then add something that says it's a float register and 
finally call goto alloc_reg. For 'u' it would be similar with TREG_ST1 but it 
doesn't exist so it probably needs to be declared. For 'f' it should be any 
float register so you should probably follow what is done for 'r' I guess.

Right now no register is allocated so a random general register will be used 
(according to what's in the stack at the address &op->reg).

Best regards,

Thomas

Attachment: signature.asc
Description: This is a digitally signed message part.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]