Browse Source

Port rot13 from MMX to SSE

rexim 5 years ago
parent
commit
45df28a94d
3 changed files with 44 additions and 0 deletions
  1. 2 0
      sse/.gitignore
  2. 5 0
      sse/Makefile
  3. 37 0
      sse/main.asm

+ 2 - 0
sse/.gitignore

@@ -0,0 +1,2 @@
+main
+*.o

+ 5 - 0
sse/Makefile

@@ -0,0 +1,5 @@
+main: main.o
+	ld -o main main.o
+
+main.o: main.asm
+	nasm -felf64 main.asm

+ 37 - 0
sse/main.asm

@@ -0,0 +1,37 @@
+%define SYS_EXIT 60
+
+segment .data
+src:   db 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15
+shift: db 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13
+cap:   db 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25
+cap0:   db 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26
+
+
+segment .text
+global _start
+
+rot13_16b:
+    movaps xmm0, [rax]
+    movaps xmm1, [shift]
+    paddb xmm0, xmm1
+    movaps xmm2, xmm0
+
+    movaps xmm1, [cap]
+    pcmpgtb xmm0, xmm1
+
+    movaps xmm1, [cap0]
+    pand xmm0, xmm1
+
+    psubb xmm2, xmm0
+    movaps [rax], xmm2
+    ret
+
+_start:
+    mov rax, src
+    call rot13_16b
+    call rot13_16b
+
+    mov rax, SYS_EXIT
+    mov rdi, 0
+    syscall
+    ret