Hi,

I have a question:

FASM refuses to compile any of these statements:



; cmpeqps xmm0,dword[data16]
; cmpeqps xmm0,qword[data16]
cmpeqps xmm0,dqword[data16]


shouldnt the last one compile without errors? I get errors 'operand sizes do not match' or 'invalid size of operand'

Another question (not very important, just curious. FASM compiles this without error:



start1: start2: xxx = 2


This a bug or a feature?

Thanks for reply in advance.

Japheth
Posted on 2003-04-03 18:44:59 by japheth
Latter statement certainly looks legal.
Posted on 2003-04-03 18:49:52 by comrade
Some more questions:

- i'm unable to compile any of these CMPxxPS/CMPxxSS opcodes with memory operand.
- I'm unable to define the 512 byte variable for FXSAVE/FXRESTOR. Hows the syntax?
- in FASM there is size operator TWORD. But shouldnt it be TBYTE instead?
Posted on 2003-04-04 02:13:08 by japheth
- CMPxxxS/CMPxxxD are fixed in 1.46 (coming soon)
- the label you use should be declared without any sizing (use the colon)
- TWORD comes from "Temporary Word", so it's not a mistake; if you want to use TBYTE, you can just define the appropriate symbolic constant.
Posted on 2003-04-04 03:11:20 by Tomasz Grysztar
Hi Privalov,

thanks for replying.

I always thought the 'T' in TBYTE comes from T/en :) .

Possibly found the cmpXX error:



sse_cmp_instruction: ;size (in mmx_size) is 16(Px), 8(SD) or 4(SS)
lodsb
call get_size_operator
cmp al,REGISTER_TYPE
jne invalid_operand
lodsb
call convert_mmx_register
cmp ah,16
jne invalid_operand_size
push eax
lodsb
cmp al,','
jne invalid_operand
lodsb
mov [operand_size],0 ;XXXX inserted
call get_size_operator
cmp al,REGISTER_TYPE
je sse_cmp_xmmreg_xmmreg
cmp al,MEMORY_TYPE
jne invalid_operand
;; mov [operand_size],0 ;XXXX deactivated (possibly too late)
call get_address


Seems to work now.

Japheth
Posted on 2003-04-04 04:13:31 by japheth
Very good! :alright: (I've fixed it in exactly the same way).
Posted on 2003-04-04 06:23:26 by Tomasz Grysztar