ASM to C: Bit Scan Reverse - most significant bit

Just starting out? Need help? Post your questions and find answers here.
User avatar
STARGÅTE
Addict
Addict
Posts: 2090
Joined: Thu Jan 10, 2008 1:30 pm
Location: Germany, Glienicke
Contact:

ASM to C: Bit Scan Reverse - most significant bit

Post by STARGÅTE »

Dear all,

how can I translate this ASM code (search the most significant bit) to the C-backend?

Code: Select all

Procedure.i MSB(Quad.q)
	If Quad = 0
		ProcedureReturn -1
	Else
		! MOV rax, [p.v_Quad]
		! BSR rax, rax
		ProcedureReturn
	EndIf
EndProcedure

Debug MSB(%0)
Debug MSB(%1000)
Debug MSB(%10001000)
Debug MSB(%100010001000)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Lizard - Script language for symbolic calculations and moreTypeface - Sprite-based font include/module
User avatar
mk-soft
Always Here
Always Here
Posts: 5409
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: ASM to C: Bit Scan Reverse - most significant bit

Post by mk-soft »

;)

Code: Select all

Procedure.i MSB(Quad.q)
	If Quad = 0
		ProcedureReturn -1
	Else
	  CompilerIf #PB_Compiler_Backend = #PB_Backend_Asm
  		! MOV rax, [p.v_Quad]
  		! BSR rax, rax
  		ProcedureReturn
  	CompilerElse
  	  Protected r1
  	  ! v_r1 = __builtin_clzll(v_quad);
  	  ProcedureReturn 63 - r1
  	CompilerEndIf
  EndIf
EndProcedure

Debug MSB(%0)
Debug MSB(%1000)
Debug MSB(%10001000)
Debug MSB(%100010001000)
Link: https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
User avatar
STARGÅTE
Addict
Addict
Posts: 2090
Joined: Thu Jan 10, 2008 1:30 pm
Location: Germany, Glienicke
Contact:

Re: ASM to C: Bit Scan Reverse - most significant bit

Post by STARGÅTE »

Thanks, also for the link to further contents.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Lizard - Script language for symbolic calculations and moreTypeface - Sprite-based font include/module
Post Reply