Here are the changes I mentioned I would do:
https://github.com/gynt/tinycc/pull/3
Let me know if it looks good then I will push it to mob.

On Mon, Jun 10, 2024 at 8:45 PM Edward Gynt <edwardg...@gmail.com> wrote:

> Now I understand what you mean with the smart thing, thanks for clearing
> it up.
> I was inspired by this line
> <https://github.com/TinyCC/tinycc/blob/3b943bec5de423e234b5f92d9a8f110ad66a85a1/TODO#L9>
> from the "TODO" that says fastcall implementation is "mostly wrong".
> It didn't seem right to me to copy code that is known to be mostly wrong.
>
> Anyway, I will change the "mov ecx" back into the "pop ecx" logic as per
> your request. And remove the test file.
>
> Does the "mov ecx" not work because the compiler would falsely believe ecx
> can be used again after a function call into windows 32 ABI while windows
> 32 can clobber it?
> Or what is the reason it won't work?
>
> Best of wishes,
>
> Gynt
>
>
> On Mon, Jun 10, 2024 at 8:14 PM grischka via Tinycc-devel <
> tinycc-devel@nongnu.org> wrote:
>
>> On 10.06.2024 11:06, Edward Gynt wrote:
>> > Hi Grischka,
>> >
>> > I am very new here, nice to meet you! I fixed the issues:
>> https://github.com/gynt/tinycc/pull/2
>> > Let me know if I should push this to mob or whether you want to have a
>> look first.
>> > I hope this is "the route that's already proven to work instead of
>> trying to be smart" you meant.
>>
>> No, that is not what I meant.  What I meant is what I wrote and
>> what I wrote is that the patch has
>>
>> >>     - too much code ... anyway seen that
>> >>         FUNC_THISCALL is identical to FUNC_FASTCALLW except
>> fastcall_nb_regs = 1;
>> >>         instead of = 2;
>>
>> Merely logically, if some patch has a (way) "too much code" problem then
>> there is no hope that it can be fixed with even more code ... ;)
>>
>> You wrote:
>>
>>      "implemented improved thiscall by using mov ecx instead of pop ecx"
>>
>> Yes sure...  Don't do this.  Don't try to be smart.
>>
>> And please remove the test that nobody except you will know how to use.
>>
>> -- gr
>>
>> > One note:
>> >  > ECX may get overwritten when other params are loaded
>> > The "this" parameter is always the last one to be loaded (first
>> argument), so I don't think it can get overwritten by other params.
>> > EAX and ECX are scratch registers that can be clobbered after a
>> function call, is this true in tinycc too?
>> > To make sure ECX isn't also used in an indirect call, I wrote it now
>> such that it throws an error if ECX is used... Not very pretty, but good to
>> know if it happens.
>> >
>> > Best of wishes,
>> >
>> > Gynt
>> >
>> > On Sat, Jun 8, 2024 at 1:03 AM grischka via Tinycc-devel <
>> tinycc-devel@nongnu.org <mailto:tinycc-devel@nongnu.org>> wrote:
>> >
>> >     On 07.06.2024 15:03, Edward Gynt wrote:
>> >      > I am having trouble reproducing your issue. My .exe files output
>> the correct information. The "C file" code you mention doesn't mark main as
>> a __thiscall, but your decompiled function lists sub_401000 as __thiscall.
>> Why?
>> >      > I don't own IDA so I can't reproduce with IDA.
>> >
>> >     Hi Ed,
>> >
>> >     honestly there are several issues with your patch.
>> >     - thiscall_nb_regs uninitialized :
>> >            causes compiled code crash mostly
>> >     - load(get_reg(RC_ECX), vtop) :
>> >            ECX may get overwritten when other params are loaded
>> >     - too much code and funny variables (int func_call2) anyway seen
>> that
>> >         FUNC_THISCALL is identical to FUNC_FASTCALLW except
>> fastcall_nb_regs = 1;
>> >         instead of = 2;
>> >
>> >     So you'd really better go along the route that's already proven to
>> >     work instead of trying to be smart ;)
>> >
>> >     -- gr
>> >
>> >      > What I do notice is that using i386-win32-tcc.exe (compiled with
>> gcc or tcc) I get identical output to before my commit.
>> >      > With tcc.exe (compiled with gcc or tcc, which in turns was built
>> with build-tcc.bat -x), I get the situation that ecx is stored in the stack
>> and then moved into eax. Very strange.
>> >      > So the x86_64 build is affected. Before I start digging into the
>> code (misplaced #ifdef somewhere?) I want to verify the byte code with you
>> to make sure we are talking about the same issue.
>> >      > Can you post yours (objdump -D) ?
>> >      >
>> >      > Compiled with version on branch mob after my commit:
>> >      >
>>
>> _______________________________________________
>> Tinycc-devel mailing list
>> Tinycc-devel@nongnu.org
>> https://lists.nongnu.org/mailman/listinfo/tinycc-devel
>>
>
_______________________________________________
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel

Reply via email to