Hi
Is marss running in the simulation mode ? Can you provide marss logfile
-Furat


On Tue, Feb 5, 2013 at 2:18 AM, Wang Albert <[email protected]> wrote:

> Hi everyone,
>
> I am trying to use the three tsx instructions xbegin, xend, and xabort in
> marss86.
>
> I pulled the "features" branch of marss86 git repository, which had been
> claimed to have supported these three RTM instruction. And I compiled and
> ran the qemu simulator with a configuration file where I configured marss86
> by using "-machine shared_l2_tsx".  After the simulator has successfully
> started, I tried to run a program containing these three instructions in
> the simulator. But it seems that some problems occur unexpectedly.
>
> Here I have contructed the simpest assembly programs in order to reveal
> the problem.
>
>
> ------------------------------------------------------------------------------------------------------
> 1   ;  tsx_test1.asm  a program for nasm for testing tsx instructions:
> xbegin and xend
> 2   ;
> 3   ; assemble:     nasm -f elf64 -l tsx_test1.lst  tsx_test1.asm
> 4   ; link:         gcc -o tsx_test1  tsx_test1.o
> 5
> 6       SECTION .text           ; code section
> 7       global main             ; make label available to linker
> 8   main:
> 9       mov     eax,0xffffffff
> 10     xbegin  0x00000000
> 11     xend
>
> -----------------------------------------------------------------------------------------------------
> 1   ;  tsx_test2.asm  a program for nasm for testing tsx instructions:
> xbegin, xend and xabort
> 2   ;
> 3   ; assemble:     nasm -f elf64 -l tsx_test2.lst  tsx_test2.asm
> 4   ; link:          gcc -o tsx_test2  tsx_test2.o
> 5       SECTION .text          ; code section
> 6       global main          ; make label available to linker
> 7   main:
> 8       mov     eax,0xffffffff
> 9       mov     ecx, 0x0032
> 10     xbegin      0x00000000
> 11     sub     ecx, 0x0001
> 12     jecxz     AA
> 13     xabort     0x12
> 14     jmp     BB
> 15  AA:
> 16     xend
> 17  BB:
> 18     nop
> 19     ret
>
> -----------------------------------------------------------------------------------------------------
>
> I compiled the two assembly code using the assembler nasm
> nasm -f elf64 -l tsx_test1.lst -o tsx_test1.o tsx_test1.asm
> nasm -f elf64 -l tsx_test1.lst -o tsx_test1.o tsx_test1.asm
> And then I link the .o files and generating two 64-bit executables:
> tsx_test1 and tsx_test2
>
> However, when I ran these two executables I got  two errors:
>
> $./tsx_test1
> Illegal instructions
>
> $./tsx_test2
> $
>
> I am almost certain that I have generated the correct opcodes for the
> xbegin, xend and xabort by using nasm assembler. From the two generated
> .lst file, we can see that the opcodes for these three instructions:
>
> XBEGIN      C7F8(00000000)
> XEND         0F01D5
> XABORT     C6F812
>
> And we can easily double-check the Intel's manual to find that they are
> correct.
>
> However, since the first testing program is just a dummy program with
> nothing between the transaction. it seems weired to get an "Illegal
> instruction" error.  I suppose the error comes from the use of XEND
> instruction because when I remove this instruction, compile and run the
> first test program again, this "Illegal instruction" error message did not
> show up again.
>
> As for the second testing program, I have deliberately designed this
> program to test how abort behaves. Before the transaction begins, I assign
> the value 0x0032 to the ecx register at line 9. after the transaction
> begins, I test if the ecx register has decreased to zero. If this is the
> case, the program jumps to line 16 and run xend (which will lead to an
> "Illegal instruction" error message! as has been shown by the first testing
> program); if this is not true, then the program would run xabort which will
> lead the program to run the fall-back path from line 11 - deceasing ecx by
> 1 and test again. So if xabort really controls the program to execute the
> fall-back path, then the content of register ecx would eventually have
> become 0 and xend at line 16 would have been executed. However, we did not
> see any "Illegal instruction" message shown when running the second testing
> program, which means that the abort instruction might not work properly
> either.
>
> I think I am using the three RTM instructions correctly. But they do not
> perform as they are expected. Is there any sample code as a guidance for
> using the three instructions in marss86? Or probably this is a potential
> bug in the implementation of marss86. Hope to get your reply as to how to
> solve this problem.
>
> Thanks!
>
> Sincerely
>
> Chao Wang
>
> _______________________________________________
> http://www.marss86.org
> Marss86-Devel mailing list
> [email protected]
> https://www.cs.binghamton.edu/mailman/listinfo/marss86-devel
>
>
_______________________________________________
http://www.marss86.org
Marss86-Devel mailing list
[email protected]
https://www.cs.binghamton.edu/mailman/listinfo/marss86-devel

Reply via email to