summaryrefslogtreecommitdiff
path: root/plugins/gxvideo/i386.asm
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/gxvideo/i386.asm')
-rw-r--r--plugins/gxvideo/i386.asm67
1 files changed, 67 insertions, 0 deletions
diff --git a/plugins/gxvideo/i386.asm b/plugins/gxvideo/i386.asm
new file mode 100644
index 00000000..86d6e231
--- /dev/null
+++ b/plugins/gxvideo/i386.asm
@@ -0,0 +1,67 @@
+; i386.asm - description
+; -------------------
+; begin : Sun Nov 08 2001
+; copyright : (C) 2001 by Pete Bernert
+; email : BlackDove@addcom.de
+
+; ported from inline gcc to nasm by linuzappz
+
+
+; This program is free software; you can redistribute it and/or modify *
+; it under the terms of the GNU General Public License as published by *
+; the Free Software Foundation; either version 2 of the License, or *
+; (at your option) any later version. See also the license.txt file for *
+; additional informations. *
+
+
+bits 32
+
+section .text
+
+%include "macros.inc"
+
+NEWSYM i386_BGR24to16
+ push ebp
+ mov ebp, esp
+ push ebx
+ push edx
+
+ mov eax, [ebp+8] ; this can hold the G value
+ mov ebx, eax ; this can hold the R value
+ mov edx, eax ; this can hold the B value
+ shr ebx, 3 ; move the R value
+ and edx, 00f80000h ; mask the B value
+ shr edx, 9 ; move the B value
+ and eax, 00f800h ; mask the G value
+ shr eax, 6 ; move the G value
+ and ebx, 0000001fh ; mask the R value
+ or eax, ebx ; add R to G value
+ or eax, edx ; add B to RG value
+ pop edx
+ pop ebx
+ mov esp, ebp
+ pop ebp
+ ret
+
+NEWSYM i386_shl10idiv
+ push ebp
+ mov ebp, esp
+ push ebx
+ push edx
+
+ mov eax, [ebp+8]
+ mov ebx, [ebp+12]
+ mov edx, eax
+ shl eax, 10
+ sar edx, 22
+ idiv ebx
+
+ pop edx
+ pop ebx
+ mov esp, ebp
+ pop ebp
+ ret
+%ifidn __OUTPUT_FORMAT__,elf
+section .note.GNU-stack noalloc noexec nowrite progbits
+%endif
+