aaaaaa123456789 icon

MIPS I reimplementation of StableRandom

aaaaaa123456789 | PRO | 06/17/19 06:25:39 AM UTC | 0 ⭐ | 426 👁️ | Never ⏰ | []
text |

2.24 KB

|

None

|

0 👍

/

0 👎

# Purely for shits and giggles.
 glabel StableRandom
  lw $t0, ($a0)
  bne $t0, $zero, .leftloaded
    lw $t1, 4($a0)
  srl $t2, $t1, 24
  addiu $t3, $zero, 4
.leftloop:
  sll $t4, $t2, 3
  addiu $t5, $t2, 29
  sll $t2, $t4, 3
  addu $t5, $t4, $t5
  addu $t4, $t2, $t5
  addiu $t3, $t3, -1
  andi $t2, $t4, 255
  sll $t4, $t0, 8
  bne $t3, $zero, .leftloop
    or $t0, $t2, $t4
  lui $t3, 256
  addiu $t3, $t3, -1
  sll $t2, $t2, 24
  and $t3, $t1, $t3
  or $t1, $t3, $t2
.leftloaded:
  srl $t2, $t0, 8
  xor $t3, $t0, $t2
  sll $t0, $t3, 9
  xor $t2, $t3, $t0
  srl $t3, $t2, 23
  xor $t0, $t2, $t3
  andi $t4, $t1, 255
  addiu $t2, $t4, -210
  bltz $t2, .noreduction
    srl $t3, $t1, 8
  addu $t4, $zero, $t2
.noreduction:
  srl $t2, $t1, 16
  andi $t3, $t3, 255
  andi $t2, $t2, 255
  addu $t5, $t4, $t3
  addu $t5, $t5, $t2
  srl $t1, $t1, 24
  beq $t5, $zero, .reloadright
    addiu $at, $zero, 719
  bne $t5, $at, .rightloaded
    nop
.reloadright:
  sll $t4, $t1, 3
  addiu $t3, $t1, 29
  sll $t2, $t4, 3
  addu $t4, $t4, $t3
  addu $t1, $t2, $t4
  sll $t5, $t1, 3
  addiu $t3, $t1, 29
  sll $t4, $t5, 3
  addu $t6, $t5, $t3
  andi $t2, $t1, 255
  addu $t1, $t4, $t6
  sll $t5, $t1, 3
  andi $t4, $t1, 255
  addiu $t3, $t1, 29
  sltiu $at, $t4, 210
  addu $t5, $t5, $t3
  addiu $at, $at, -1
  sll $t6, $t1, 6
  andi $at, $at, 210
  addu $t1, $t5, $t6
  subu $t4, $t4, $at
  andi $t3, $t1, 255
.rightloaded:
  addiu $at, $zero, 210
  multu $at, $t2
  sll $t2, $t3, 16
  mflo $t5
  addu $t4, $t5, $t4
  srl $t3, $t4, 8
  andi $t5, $t4, 255
  addu $t2, $t2, $t3
  sll $t4, $t5, 8
  addu $t2, $t2, $t4
  sll $t3, $t1, 3
  addiu $t4, $t1, 29
  sll $t1, $t1, 6
  addu $t3, $t3, $t4
  addu $t4, $t1, $t3
  sll $t1, $t4, 24
  addu $t1, $t1, $t2
  sw $t0, ($a0)
  sw $t1, 4($a0)
  srl $t2, $t1, 27
  andi $t3, $t2, 24
  srl $t4, $t1, 28
  srlv $t5, $t0, $t3
  srl $t2, $t1, 8
  andi $t3, $t4, 3
  andi $t1, $t2, 255
  andi $t0, $t5, 255
  addu $t2, $t0, $t1
  beq $t3, $zero, .done
    addiu $at, $zero, 1
  xor $t2, $t0, $t1
  beq $t3, $at, .done
    addiu $at, $zero, 2
  subu $t2, $t0, $t1
  beq $t3, $at, .done
    nop
  subu $t2, $t1, $t0
.done:
  jr $ra
    andi $v0, $t2, 255

Comments