Sorry for my previous incomplete email

Hi,

I have another small question. Actually, I am implementing hardware
transactional memory support in QEMU. I have implemented the following two
helper functions functions in targer-i386/helper.c

void helper_StartTransaction()
void helper_CommitTransaction();

My application looks as follows.
int main()
{
      __asm_volatile("mov %al %al"); //is detected in translation.c and
helper_StartTransaction is called
      //add the code here
     __asm_volatile("mov %bl %bl"); //is detected in translation.c and
helper_CommitTransaction is called
}

In case a transaction fails, I detect it inside the code for
helper_CommitTransaction(), now I need to jump back to the start of
transaction. I do it by using setjmp inside helper_StartTransaction and
calling longjmp inside CommitTransaction, Code for the two helper functions
is as follows

void helper_StartTransaction()
{
   printf("StartTransaction Called\n");
   if(setjmp(env->tm_jmp))
   {
     printf("Transaction restart\");
   }

}

void helper_CommitTransaction()
{
   printf("CommitTransaction Called\n");
   longjmp(env->tm_jmp, 0);
}

But this prints "Transaction restart" once and then the program finishes.
This means that commit transaction is not called the second time. Could you
please tell me what am I doing wrong?

Regards,
Atif
On 4/16/07, Atif Hashmi <[EMAIL PROTECTED]> wrote:



On 4/8/07, Eduardo Felipe <[EMAIL PROTECTED]> wrote:
>
>
> I recommend:
>
> http://fabrice.bellard.free.fr/qemu/user-doc.html
>
> Regards,
> Eduardo
>


Reply via email to