The MASM Forum
64 bit assembler => UASM Assembler Development => Topic started by: Biterider on February 26, 2020, 03:39:20 AM
-
Hi
I'm having some problems with the vmovdqu instruction. It seems that the memory argument is not being encoded correctly or I'm doing something wrong.
The test code is very simple:
.data
MyYmm YMMWORD 123456789012345678901234567890
.code
start proc
vmovdqu ymm0, MyYmm
ret
start endp
The debug output looks like:
00007FF615751000 C5 FE 6F 85 F8 1F 00 00 vmovdqu ymm0,ymmword ptr [rbp+1FF8h]
00007FF615751008 C3 ret
triggering a GPF.
Regards, Biterider
-
Same with 32-bit code. Where does the [?bp... creep in?
ML 14.0 assembles it as follows (but complains about bad data initialiser etc):
0040658A ³. C5FE:6F05 00704000 vmovdqu ymm0, [407000]
-
Hi
Playing a bit with this instruction, I've noticed that writing the ymm register back to memory is encoded correctly.
Biterider
-
Hi Biterider,
good find, this is definitely a bug :thumbsup:
It works fine with a new codegen.c and it will be easy fixed in next release:
000000013FF35A3C C5 FE 6F 05 7F 5C 00 00 vmovdqu ymm0,ymmword ptr [MyYmm (013FF3B6C3h)Thanks :biggrin:
-
Hi habran
Thank you for addressing this issue. Do you have an idea when do you will get a fix?
In the meantime, I'm going to replace vmovdqu with vlddqu, which does a similar job.
Biterider
-
Hi Biterider,
I don't know if John is available to upload the fix so I attached InstrTablev2.h for you
replace the one in H folder with this one and build uasm source
that will fix the problem.
-
Thank you Habran!
-
This fix is now also on 2.50 branch on Git.
-
:thumbsup: