Skip to content

Instantly share code, notes, and snippets.

@dector
Created April 26, 2011 14:53
Show Gist options
  • Save dector/942409 to your computer and use it in GitHub Desktop.
Save dector/942409 to your computer and use it in GitHub Desktop.
link l1:ct
accept r9: 0 \ R9:R10 <- Z
accept r10: 0
accept r11: 0 \ My flag register
\ ---------- CONFIG BEGINS -----------\
accept r6: 2h \ R6 <- X
accept r7: 0fffeh \ R7:R8 <- 0.Y
\ ---------- CONFIG ENDS -------------\
accept r8: 0 \!!! ALWAYS NULL
{and nil, r6, 8000h; load rm, flags;}
{cjp rm_z, tst1;}
{sub r6, z, r6, nz;}
{xor r11, 8000h;}
tst1 {and nil, r7, 8000h; load rm, flags;}
{cjp rm_z, oper;}
{sub r7, z, r7, nz;}
{xor r11, 8000h;}
oper {add srl, r7, z;} \ Transform R7:R8=Y to R7:R8=0.Y
{add sr.9, r8, z;}
iter {and nil, r6, 8000h; load rm, flags;} \ Check first bit
{cjp rm_z, var1;} \ If it is not 1
{add r10, r8; load rm, flags;} \ Count sum
{add r9, r7, rm_c;}
var1 {add sll, r6, z;} \ Shift other registers
{add srl, r7, z;} \ } Use R7:R8 as one
{add sr.9, r8, z;} \ } register
{or r6, r6; load rm, flags;} \ Check multiplyer emptynes
{cjp not rm_z, iter;} \ If it's not 0 - count next iteration
{and nil, r11, 8000h; load rm, flags;}
{cjp rm_z, exit;}
{or r9, 8000h;}
exit {} \ End of counting
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment