Author Topic: krad-uasm-wip 2.54.0 version  (Read 870 times)

KradMoonRa

  • Member
  • **
  • Posts: 80
krad-uasm-wip 2.54.0 version
« on: April 26, 2021, 08:39:12 AM »
Hi.
This is my wip version of uasm.

* Added better platform preprocessor at compile time detection.
* TODO-Add missing and old compilers support in the preprocessor.
* Replicated calling convention consistencies in source builds, Windows-call-conventions-defaults=__vectorcall, Linux|Mach-call-convention-defaults=sysv_abi.
* Added options for SIMD platform instruction selection at compile time, source build hardening and optimizations, in Clang Linux Gcc Linux Clang OSX mak-files.
* Ubuntu debian build fixed to reflect mak-files changes.
* TODO-OSX not tested for the current Clang OSX mk file.
* Synced Jhon Terraspace/UASM/tree/v2.53 commit 8f8feb76a3fec91c5038bb09dfc304df804f5e16.
* Added build options for SIMD platform instruction selection at compile time for Windows x64/x86.
* Added versioning to reflect UASM compile time changes.
* TODO-Continue UASM sources optimization path, bringing optimized cpu intrinsic to .asm source files.
* Fixed and moved embedded uasm macros to include/uasm/macros .inc files types. This bring more control and consistency in assembling for target platforms.

To check for the macros, You can start with include macrolib.inc in your .asm file.

Now Windows Setup for 64bits and 32bits, add the necessary path environment variables, and MSBuild BuildCustomizations for VS2019.

For windows and Linux64 binaries go to: 2.54.0 release

Mac OSX still in TODO-List.

Linux installs to /usr/bin/uasm and inc files to /usr/include/uasm, so it can be used from bash or dash as usual gcc compiler.
Remember to pass (-I /usr/include/uasm) in uasm command to find the include files.

Linux ubuntu package manager Instructions: currently only done for focal 20.04 release.

add the sign key to your trusted keys
Code: [Select]
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key 10649EA8D069C51Dor
Code: [Select]
curl -fsSL https://apt.navegos.net/pub.key | sudo apt-key add -
Source Links:

Now you can try the uasm built with SIMD intrinsics. Simple change the link.
   
Code: [Select]
   SSE2=https://apt.navegos.net/ubuntu/uasm/
   AVX=https://apt.navegos.net/ubuntu/uasm-avx/
   AVX2=https://apt.navegos.net/ubuntu/uasm-avx2/
   AVX512=https://apt.navegos.net/ubuntu/uasm-avx512/

add package as sudo:
Code: [Select]
sudo add-apt-repository "deb [arch=amd64] https://apt.navegos.net/ubuntu/uasm/ $(lsb_release -cs) main"or
Code: [Select]
echo "deb [arch=amd64] https://apt.navegos.net/ubuntu/uasm/ focal main" | sudo tee /etc/apt/sources.list.d/uasm.list
update and install
Code: [Select]
sudo apt-get update && sudo apt-get install uasm-dev uasm uasmd
debug symbols for uasmd
Code: [Select]
sudo apt-get install uasmd-dbgsym
to remove
Code: [Select]
sudo apt-get purge uasm-dev uasm uasmd uasmd-dbgsym

lucho

  • Regular Member
  • *
  • Posts: 3
Re: krad-uasm-wip 2.54.0 version
« Reply #1 on: May 02, 2021, 04:10:58 AM »
Thank you for working on UASM! I could build it OK, but an old bug that was present also in the old version 2.49 is still there. The following code

Code: [Select]
.code
tst proc
.for (eax = 0: edx == 0: )
nop
.endfor
tst endp
end

when built with "uasm -elf -3 -mf -Fl -Sa test.s", results in this listing:

Code: [Select]
test.s
                            *   .model FLAT
00000000                    *   _TEXT segment DWORD FLAT PUBLIC 'CODE'
                            *   _TEXT ends
00000000                    *   _DATA segment DWORD FLAT PUBLIC 'DATA'
                            *   _DATA ends
                            *   assume cs:flat,ds:flat,ss:flat,es:flat,fs:ERROR,gs:ERROR
                                .code
00000000                    *   _TEXT segment
                            *   assume cs:FLAT
00000000                        tst proc
00000000                                .for (eax = 0: edx == 0: )
00000000  33C0              *    xor  eax, eax
00000002                    *   @C0001:
00000002  90                                    nop
00000003                                .endfor
00000003  EBFD              *    jmp @C0001
00000005                        tst endp
                                end
00000005                    *   _TEXT ends

As you see, there is no check for the condition. If I add a statement between the last ":" of the ".for" and the parenthesis:

Code: [Select]
.code
tst proc
        .for (eax = 0: edx == 0: edx = edx)
                nop
        .endfor
tst endp
end

then it does generate a code for the condition check:

Code: [Select]
test.s
                            *   .model FLAT
00000000                    *   _TEXT segment DWORD FLAT PUBLIC 'CODE'
                            *   _TEXT ends
00000000                    *   _DATA segment DWORD FLAT PUBLIC 'DATA'
                            *   _DATA ends
                            *   assume cs:flat,ds:flat,ss:flat,es:flat,fs:ERROR,gs:ERROR
                                .code
00000000                    *   _TEXT segment
                            *   assume cs:FLAT
00000000                        tst proc
00000000                                .for (eax = 0: edx == 0: edx = edx)
00000000  33C0              *    xor  eax, eax
00000002  EB03              *    jmp @C0002
00000004                    *   @C0001:
00000004  90                                    nop
00000005                                .endfor
00000005  8BD2              *    mov   edx,  edx
00000007                    *   @C0002:
00000007  85D2              *   test edx, edx
00000009  74F9              *   jz  @C0001
0000000B                        tst endp
                                end
0000000B                    *   _TEXT ends

The bug must be in the "hll.c" file between lines 1768 and 1909, but it's difficult for me to see it as I'm not familiar with the internals of this code. Please check it out.

tenkey

  • Regular Member
  • *
  • Posts: 39
Re: krad-uasm-wip 2.54.0 version
« Reply #2 on: May 17, 2021, 04:59:36 AM »
Thank you for working on UASM! I could build it OK, but an old bug that was present also in the old version 2.49 is still there. The following code

Code: [Select]
.code
tst proc
.for (eax = 0: edx == 0: )
nop
.endfor
tst endp
end

when built with "uasm -elf -3 -mf -Fl -Sa test.s", results in this listing:

Code: [Select]
test.s
                            *   .model FLAT
00000000                    *   _TEXT segment DWORD FLAT PUBLIC 'CODE'
                            *   _TEXT ends
00000000                    *   _DATA segment DWORD FLAT PUBLIC 'DATA'
                            *   _DATA ends
                            *   assume cs:flat,ds:flat,ss:flat,es:flat,fs:ERROR,gs:ERROR
                                .code
00000000                    *   _TEXT segment
                            *   assume cs:FLAT
00000000                        tst proc
00000000                                .for (eax = 0: edx == 0: )
00000000  33C0              *    xor  eax, eax
00000002                    *   @C0001:
00000002  90                                    nop
00000003                                .endfor
00000003  EBFD              *    jmp @C0001
00000005                        tst endp
                                end
00000005                    *   _TEXT ends

As you see, there is no check for the condition.

The bug must be in the "hll.c" file

I have a version of hll.c that fixes the problem.

lucho

  • Regular Member
  • *
  • Posts: 3
Re: krad-uasm-wip 2.54.0 version
« Reply #3 on: May 17, 2021, 05:14:44 AM »
I have a version of hll.c that fixes the problem.

That's great! Could you please post a patch here? Thanks!

tenkey

  • Regular Member
  • *
  • Posts: 39
Re: krad-uasm-wip 2.54.0 version
« Reply #4 on: May 18, 2021, 04:22:25 AM »
Here's the version of hll.c for kradmoonra's UASM code base (v. 2.54.0).
It fixes the .for-.endfor code generation bug.
« Last Edit: May 26, 2021, 01:30:03 AM by tenkey »

lucho

  • Regular Member
  • *
  • Posts: 3
Re: krad-uasm-wip 2.54.0 version
« Reply #5 on: May 19, 2021, 05:52:45 PM »
Thank you very much! Just tested it and can confirm that it really fixes the bug. Hope that the other UASM branches take advantage of your fixed version too.