diff options
author | Thilo Schulz <arny@ats.s.bawue.de> | 2011-06-13 10:54:37 +0000 |
---|---|---|
committer | Tim Angus <tim@ngus.net> | 2013-01-09 23:15:55 +0000 |
commit | d4c0287699091dc0b6e1e19a83210bcb3f093064 (patch) | |
tree | aec29c00f06943846a68659fb5e60dd58622a46e /src/asm/ftola.c | |
parent | fca35e6b402050ae45f3ca463b0ff48daafda987 (diff) |
Forgot the inline assembler parts, here they come! Using inline asm to get rid of all the boilerplate stuff
Diffstat (limited to 'src/asm/ftola.c')
-rw-r--r-- | src/asm/ftola.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/asm/ftola.c b/src/asm/ftola.c new file mode 100644 index 00000000..7bfc6078 --- /dev/null +++ b/src/asm/ftola.c @@ -0,0 +1,80 @@ +/* +=========================================================================== +Copyright (C) 2011 Thilo Schulz <thilo@tjps.eu> + +This file is part of Quake III Arena source code. + +Quake III Arena source code 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. + +Quake III Arena source code is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + + You should have received a copy of the GNU General Public License +along with Quake III Arena source code; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +=========================================================================== +*/ + +#include "qasm-inline.h" + +/* + * GNU inline asm ftol conversion functions using SSE or FPU + */ + +long qftolsse(float f) +{ + register long retval; + + __asm__ volatile + ( + "cvttss2si %1, %0\n" + : "=a" (retval) + : "x" (f) + ); + + return retval; +} + +void qvmftolsse(void) +{ + __asm__ volatile + ( + "movss (" EDI ", " EBX ", 4), %%xmm0\n" + "cvttss2si %%xmm0, " EAX "\n" + : + : + : "%xmm0" + ); +} + +long qftolx87(float f) +{ + register long retval; + + __asm__ volatile + ( + "flds %1\n" + "fistpl %1\n" + "mov %1, %0\n" + : "=a" (retval) + : "m" (f) + ); + + return retval; +} + +void qvmftolx87(void) +{ + __asm__ volatile + ( + "flds (" EDI ", " EBX ", 4)\n" + "fistpl (" EDI ", " EBX ", 4)\n" + "mov (" EDI ", " EBX ", 4), " EAX "\n" + : + ); +} |