tinycc-devel
[Top][All Lists]
Advanced

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

[Tinycc-devel] Crutches_for_TCC_inline_Asm


From: ANDY TAKKER
Subject: [Tinycc-devel] Crutches_for_TCC_inline_Asm
Date: Fri, 14 Jul 2017 10:07:55 +0300

Crutches for TCC inline Asm.

The beginning of the story is here:
http://lists.nongnu.org/archive/html/tinycc-devel/2017-07/msg00031.html
http://lists.nongnu.org/archive/html/tinycc-devel/2017-07/msg00032.html

As I see, there are no good teaches among tinycc-devel.
So, let's go on. Next program compiling well, but
linking bad.

#include <stdio.h>

 int   main()
{

unsigned int a = 0;
b:
   asm ( "cpuid" );
   asm ( "rdtsc" );
   asm ( "mov %eax, a" );
  printf("%d\n", a);
goto b;
}

:00000040 55                      push ebp
:00000041 89E5                    mov ebp, esp
:00000043 81EC04000000            sub esp, 00000004
:00000049 90                      nop
:0000004A B800000000              mov eax, 00000000
:0000004F 8945FC                  mov dword ptr [ebp-04], eax
:00000052 0FA2                    cpuid
:00000054 0F31                    rdtsc
mistake :00000056 A300000000              mov dword ptr [00000000], eax
:0000005B 8B45FC                  mov eax, dword ptr [ebp-04]
:0000005E 50                      push eax
:0000005F B800000000              mov eax, 00000000
:00000064 50                      push eax
:00000065 E8FCFFFFFF              call 00000066
:0000006A 83C408                  add esp, 00000008
:0000006D EBE3                    jmp 00000052
:0000006F C9                      leave
:00000070 C3                      ret

The next program compiling well, linking well,
but brings bad results.

#include <stdio.h>

unsigned int a = 0;

 int   main()
{

unsigned int a;
b:
   asm ( "cpuid" );
   asm ( "rdtsc" );
   asm ( "mov %eax, a" );
  printf("%d\n", a);
goto b;
}

And now... THE CRUTCHES!!!

A good pattern, for all beginners, who
does not want to drown in such nonsense:

int src = 1;
int dst;
asm ("mov %1, %0\n\t"
    "add $1, %0"
    : "=r" (dst)
    : "r" (src));
printf("%d\n", dst);

ENJOY!

#include <stdio.h>

unsigned int temp0;

 int   main()
{

unsigned int a;
b:
   a = 0;
   temp0 = a;
   asm ( "cpuid" );
   asm ( "rdtsc" );
   asm ( "mov %eax, temp0" );
   a = temp0;
  printf("%d\n", a);
goto b;
}

As you see, TCC inline Assembler
not see local variables. And it's
not evil tongues from
https://sites.google.com/site/excelmidi/universal_student_ide/universal_student_ide_en
  .

A big piece of work has been done. But
who really need this heap of trash:

#include <stdio.h>

 int   main()
{

int src = 1;
int dst = 0;

asm ("mov %1, %0\n\t"
    "add $1, %0"
    : "=r" (dst)
   : "r" (src));

printf("%d\n", dst);
}

:00000040 55                      push ebp
:00000041 89E5                    mov ebp, esp
:00000043 81EC08000000            sub esp, 00000008
:00000049 90                      nop
:0000004A B801000000              mov eax, 00000001
:0000004F 8945FC                  mov dword ptr [ebp-04], eax
:00000052 B800000000              mov eax, 00000000
:00000057 8945F8                  mov dword ptr [ebp-08], eax
:0000005A 8B45FC                  mov eax, dword ptr [ebp-04]
:0000005D 89C0                    mov eax, eax
:0000005F 0501000000              add eax, 00000001
:00000064 8945F8                  mov dword ptr [ebp-08], eax
:00000067 8B45F8                  mov eax, dword ptr [ebp-08]
:0000006A 50                      push eax
:0000006B B800000000              mov eax, 00000000
:00000070 50                      push eax
:00000071 E8FCFFFFFF              call 00000072
:00000076 83C408                  add esp, 00000008
:00000079 C9                      leave
:0000007A C3                      ret

Of couse, Fabrice will never patch TCC. Because of because.
It is life.

Welcome https://sites.google.com/site/excelmidi   . Check
your CPU. New funny bug all x86.  Forget about optimization:
https://sites.google.com/site/excelmidi/stupid-bug-x86-cpu-tupoj-bag-processora-h86
 :)!



reply via email to

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