Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nx-libs
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dimbor
nx-libs
Commits
53d304ef
Unverified
Commit
53d304ef
authored
Nov 03, 2016
by
Mihai Moldovan
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'sunweaver-pr/drop-fbmmx' into arctica-3.6.x
Attributes GH PR #253:
https://github.com/ArcticaProject/nx-libs/pull/253
parents
d12b7754
f5c5cb10
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
3 additions
and
504 deletions
+3
-504
Imakefile
nx-X11/programs/Xserver/fb/Imakefile
+3
-22
fbcopy.c
nx-X11/programs/Xserver/fb/fbcopy.c
+0
-25
fbfill.c
nx-X11/programs/Xserver/fb/fbfill.c
+0
-6
fbmmx.c
nx-X11/programs/Xserver/fb/fbmmx.c
+0
-0
fbmmx.h
nx-X11/programs/Xserver/fb/fbmmx.h
+0
-220
fbpict.c
nx-X11/programs/Xserver/fb/fbpict.c
+0
-231
No files found.
nx-X11/programs/Xserver/fb/Imakefile
View file @
53d304ef
/*
* The X.org 6.8.99.16 snapshot fails to compile with GCC 4.
* Temporarily disable the MMX features until the bug is
* fixed.
*
#if defined(HasGcc34) && HasGcc34
MMXOPTIONS= -mmmx -msse -Winline --param inline-unit-growth=10000 \
--param large-function-growth=10000 -DUSE_MMX
USEMMXOPTIONS= -DUSE_MMX
#if defined(i386Architecture) || defined(AMD64Architecture)
SpecialCObjectRule(fbmmx,fbmmx.c,$(MMXOPTIONS))
SpecialCObjectRule(fbpict,fbpict.c,$(USEMMXOPTIONS))
SpecialCObjectRule(fbfill,fbfill.c,$(USEMMXOPTIONS))
SpecialCObjectRule(fbcopy,fbcopy.c,$(USEMMXOPTIONS))
#endif
#endif
*/
NULL =
#include <Server.tmpl>
...
...
@@ -73,7 +55,7 @@ SRCS = $(XFMODSRC) \
fbwindow.c \
fb24_32.c \
fbpict.c \
fbmmx.c \
$(NULL)
OBJS = $(XFMODOBJ) \
fbarc.o \
...
...
@@ -109,7 +91,7 @@ OBJS = $(XFMODOBJ) \
fbwindow.o \
fb24_32.o \
fbpict.o \
fbmmx.o \
$(NULL)
INCLUDES = -I$(SERVERSRC)/fb -I$(SERVERSRC)/mi -I$(SERVERSRC)/include \
-I$(XINCLUDESRC) \
...
...
@@ -170,7 +152,6 @@ LinkSourceFile(fbtile.c,LinkDirectory)
LinkSourceFile(fbtrap.c,LinkDirectory)
LinkSourceFile(fbutil.c,LinkDirectory)
LinkSourceFile(fbwindow.c,LinkDirectory)
LinkSourceFile(fbmmx.c,LinkDirectory)
#endif
InstallDriverSDKLibraryModule(fb,$(DRIVERSDKMODULEDIR),.)
...
...
nx-X11/programs/Xserver/fb/fbcopy.c
View file @
53d304ef
...
...
@@ -30,7 +30,6 @@
#ifdef IN_MODULE
#include "xf86_ansic.h"
#endif
#include "fbmmx.h"
void
fbCopyNtoN
(
DrawablePtr
pSrcDrawable
,
...
...
@@ -61,27 +60,6 @@ fbCopyNtoN (DrawablePtr pSrcDrawable,
while
(
nbox
--
)
{
#ifdef USE_MMX
if
(
pm
==
FB_ALLONES
&&
alu
==
GXcopy
&&
!
reverse
&&
!
upsidedown
&&
fbHaveMMX
())
{
if
(
!
fbCopyAreammx
(
pSrcDrawable
,
pDstDrawable
,
(
pbox
->
x1
+
dx
),
(
pbox
->
y1
+
dy
),
(
pbox
->
x1
),
(
pbox
->
y1
),
(
pbox
->
x2
-
pbox
->
x1
),
(
pbox
->
y2
-
pbox
->
y1
)))
goto
fallback
;
else
goto
next
;
}
fallback:
#endif
fbBlt
(
src
+
(
pbox
->
y1
+
dy
+
srcYoff
)
*
srcStride
,
srcStride
,
(
pbox
->
x1
+
dx
+
srcXoff
)
*
srcBpp
,
...
...
@@ -99,9 +77,6 @@ fbCopyNtoN (DrawablePtr pSrcDrawable,
reverse
,
upsidedown
);
#ifdef USE_MMX
next:
#endif
pbox
++
;
}
}
...
...
nx-X11/programs/Xserver/fb/fbfill.c
View file @
53d304ef
...
...
@@ -27,7 +27,6 @@
#endif
#include "fb.h"
#include "fbmmx.h"
void
fbFill
(
DrawablePtr
pDrawable
,
...
...
@@ -47,11 +46,6 @@ fbFill (DrawablePtr pDrawable,
switch
(
pGC
->
fillStyle
)
{
case
FillSolid
:
#ifdef USE_MMX
if
(
!
pPriv
->
and
&&
fbHaveMMX
())
if
(
fbSolidFillmmx
(
pDrawable
,
x
,
y
,
width
,
height
,
pPriv
->
xor
))
return
;
#endif
fbSolid
(
dst
+
(
y
+
dstYoff
)
*
dstStride
,
dstStride
,
(
x
+
dstXoff
)
*
dstBpp
,
...
...
nx-X11/programs/Xserver/fb/fbmmx.c
deleted
100644 → 0
View file @
d12b7754
This diff is collapsed.
Click to expand it.
nx-X11/programs/Xserver/fb/fbmmx.h
deleted
100644 → 0
View file @
d12b7754
/*
* Copyright © 2004 Red Hat, Inc.
* Copyright © 2005 Trolltech AS
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of Red Hat not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. Red Hat makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
* SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
* SOFTWARE.
*
* Author: Søren Sandmann (sandmann@redhat.com)
* Lars Knoll (lars@trolltech.com)
*
* Based on work by Owen Taylor
*/
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#ifdef USE_MMX
#if !defined(__amd64__) && !defined(__x86_64__)
Bool
fbHaveMMX
(
void
);
#else
#define fbHaveMMX() TRUE
#endif
#else
#define fbHaveMMX() FALSE
#endif
#ifdef USE_MMX
void
fbComposeSetupMMX
(
void
);
void
fbCompositeSolidMask_nx8888x0565Cmmx
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pMask
,
PicturePtr
pDst
,
INT16
xSrc
,
INT16
ySrc
,
INT16
xMask
,
INT16
yMask
,
INT16
xDst
,
INT16
yDst
,
CARD16
width
,
CARD16
height
);
void
fbCompositeSrcAdd_8888x8888mmx
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pMask
,
PicturePtr
pDst
,
INT16
xSrc
,
INT16
ySrc
,
INT16
xMask
,
INT16
yMask
,
INT16
xDst
,
INT16
yDst
,
CARD16
width
,
CARD16
height
);
void
fbCompositeSrc_8888x8888mmx
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pMask
,
PicturePtr
pDst
,
INT16
xSrc
,
INT16
ySrc
,
INT16
xMask
,
INT16
yMask
,
INT16
xDst
,
INT16
yDst
,
CARD16
width
,
CARD16
height
);
void
fbCompositeSolidMask_nx8888x8888Cmmx
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pMask
,
PicturePtr
pDst
,
INT16
xSrc
,
INT16
ySrc
,
INT16
xMask
,
INT16
yMask
,
INT16
xDst
,
INT16
yDst
,
CARD16
width
,
CARD16
height
);
void
fbCompositeSolidMask_nx8x8888mmx
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pMask
,
PicturePtr
pDst
,
INT16
xSrc
,
INT16
ySrc
,
INT16
xMask
,
INT16
yMask
,
INT16
xDst
,
INT16
yDst
,
CARD16
width
,
CARD16
height
);
void
fbCompositeSrcAdd_8000x8000mmx
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pMask
,
PicturePtr
pDst
,
INT16
xSrc
,
INT16
ySrc
,
INT16
xMask
,
INT16
yMask
,
INT16
xDst
,
INT16
yDst
,
CARD16
width
,
CARD16
height
);
void
fbCompositeSrc_8888RevNPx8888mmx
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pMask
,
PicturePtr
pDst
,
INT16
xSrc
,
INT16
ySrc
,
INT16
xMask
,
INT16
yMask
,
INT16
xDst
,
INT16
yDst
,
CARD16
width
,
CARD16
height
);
void
fbCompositeSrc_8888RevNPx0565mmx
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pMask
,
PicturePtr
pDst
,
INT16
xSrc
,
INT16
ySrc
,
INT16
xMask
,
INT16
yMask
,
INT16
xDst
,
INT16
yDst
,
CARD16
width
,
CARD16
height
);
void
fbCompositeSolid_nx8888mmx
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pMask
,
PicturePtr
pDst
,
INT16
xSrc
,
INT16
ySrc
,
INT16
xMask
,
INT16
yMask
,
INT16
xDst
,
INT16
yDst
,
CARD16
width
,
CARD16
height
);
void
fbCompositeSolid_nx0565mmx
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pMask
,
PicturePtr
pDst
,
INT16
xSrc
,
INT16
ySrc
,
INT16
xMask
,
INT16
yMask
,
INT16
xDst
,
INT16
yDst
,
CARD16
width
,
CARD16
height
);
void
fbCompositeSolidMask_nx8x0565mmx
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pMask
,
PicturePtr
pDst
,
INT16
xSrc
,
INT16
ySrc
,
INT16
xMask
,
INT16
yMask
,
INT16
xDst
,
INT16
yDst
,
CARD16
width
,
CARD16
height
);
void
fbCompositeSrc_8888x8x8888mmx
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pMask
,
PicturePtr
pDst
,
INT16
xSrc
,
INT16
ySrc
,
INT16
xMask
,
INT16
yMask
,
INT16
xDst
,
INT16
yDst
,
CARD16
width
,
CARD16
height
);
Bool
fbCopyAreammx
(
DrawablePtr
pSrc
,
DrawablePtr
pDst
,
int
src_x
,
int
src_y
,
int
dst_x
,
int
dst_y
,
int
width
,
int
height
);
void
fbCompositeCopyAreammx
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pMask
,
PicturePtr
pDst
,
INT16
xSrc
,
INT16
ySrc
,
INT16
xMask
,
INT16
yMask
,
INT16
xDst
,
INT16
yDst
,
CARD16
width
,
CARD16
height
);
Bool
fbSolidFillmmx
(
DrawablePtr
pDraw
,
int
x
,
int
y
,
int
width
,
int
height
,
FbBits
xor
);
#endif
/* USE_MMX */
nx-X11/programs/Xserver/fb/fbpict.c
View file @
53d304ef
...
...
@@ -34,7 +34,6 @@
#include "picturestr.h"
#include "mipict.h"
#include "fbpict.h"
#include "fbmmx.h"
typedef
void
(
*
CompositeFunc
)
(
CARD8
op
,
PicturePtr
pSrc
,
...
...
@@ -850,14 +849,6 @@ fbComposite (CARD8 op,
int
x_msk
,
y_msk
,
x_src
,
y_src
,
x_dst
,
y_dst
;
int
w
,
h
,
w_this
,
h_this
;
#ifdef USE_MMX
static
Bool
mmx_setup
=
FALSE
;
if
(
!
mmx_setup
)
{
fbComposeSetupMMX
();
mmx_setup
=
TRUE
;
}
#endif
xDst
+=
pDst
->
pDrawable
->
x
;
yDst
+=
pDst
->
pDrawable
->
y
;
if
(
pSrc
->
pDrawable
)
{
...
...
@@ -879,13 +870,6 @@ fbComposite (CARD8 op,
&&
(
!
pMask
||
pMask
->
filter
!=
PictFilterConvolution
))
switch
(
op
)
{
case
PictOpSrc
:
#ifdef USE_MMX
if
(
!
pMask
&&
pSrc
->
format
==
pDst
->
format
&&
pSrc
->
format
!=
PICT_a8
&&
pSrc
->
pDrawable
!=
pDst
->
pDrawable
)
{
func
=
fbCompositeCopyAreammx
;
}
#endif
break
;
case
PictOpOver
:
if
(
pMask
)
...
...
@@ -901,11 +885,6 @@ fbComposite (CARD8 op,
switch
(
pDst
->
format
)
{
case
PICT_r5g6b5
:
case
PICT_b5g6r5
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeSolidMask_nx8x0565mmx
;
else
#endif
func
=
fbCompositeSolidMask_nx8x0565
;
break
;
case
PICT_r8g8b8
:
...
...
@@ -916,11 +895,6 @@ fbComposite (CARD8 op,
case
PICT_x8r8g8b8
:
case
PICT_a8b8g8r8
:
case
PICT_x8b8g8r8
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeSolidMask_nx8x8888mmx
;
else
#endif
func
=
fbCompositeSolidMask_nx8x8888
;
break
;
}
...
...
@@ -930,19 +904,9 @@ fbComposite (CARD8 op,
switch
(
pDst
->
format
)
{
case
PICT_a8r8g8b8
:
case
PICT_x8r8g8b8
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeSolidMask_nx8888x8888Cmmx
;
else
#endif
func
=
fbCompositeSolidMask_nx8888x8888C
;
break
;
case
PICT_r5g6b5
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeSolidMask_nx8888x0565Cmmx
;
else
#endif
func
=
fbCompositeSolidMask_nx8888x0565C
;
break
;
}
...
...
@@ -953,19 +917,9 @@ fbComposite (CARD8 op,
switch
(
pDst
->
format
)
{
case
PICT_a8b8g8r8
:
case
PICT_x8b8g8r8
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeSolidMask_nx8888x8888Cmmx
;
else
#endif
func
=
fbCompositeSolidMask_nx8888x8888C
;
break
;
case
PICT_b5g6r5
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeSolidMask_nx8888x0565Cmmx
;
else
#endif
func
=
fbCompositeSolidMask_nx8888x0565C
;
break
;
}
...
...
@@ -1003,16 +957,8 @@ fbComposite (CARD8 op,
switch
(
pDst
->
format
)
{
case
PICT_a8r8g8b8
:
case
PICT_x8r8g8b8
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeSrc_8888RevNPx8888mmx
;
#endif
break
;
case
PICT_r5g6b5
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeSrc_8888RevNPx0565mmx
;
#endif
break
;
}
break
;
...
...
@@ -1025,16 +971,8 @@ fbComposite (CARD8 op,
switch
(
pDst
->
format
)
{
case
PICT_a8b8g8r8
:
case
PICT_x8b8g8r8
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeSrc_8888RevNPx8888mmx
;
#endif
break
;
case
PICT_r5g6b5
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeSrc_8888RevNPx0565mmx
;
#endif
break
;
}
break
;
...
...
@@ -1054,10 +992,6 @@ fbComposite (CARD8 op,
pDst
->
format
==
PICT_x8r8g8b8
&&
pMask
->
format
==
PICT_a8
)
{
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeSrc_8888x8x8888mmx
;
#endif
}
}
}
...
...
@@ -1075,22 +1009,8 @@ fbComposite (CARD8 op,
switch
(
pDst
->
format
)
{
case
PICT_a8r8g8b8
:
case
PICT_x8r8g8b8
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
{
srcRepeat
=
FALSE
;
func
=
fbCompositeSolid_nx8888mmx
;
}
#endif
break
;
case
PICT_r5g6b5
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
{
srcRepeat
=
FALSE
;
func
=
fbCompositeSolid_nx0565mmx
;
}
#endif
break
;
}
break
;
...
...
@@ -1103,11 +1023,6 @@ fbComposite (CARD8 op,
switch
(
pDst
->
format
)
{
case
PICT_a8r8g8b8
:
case
PICT_x8r8g8b8
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeSrc_8888x8888mmx
;
else
#endif
func
=
fbCompositeSrc_8888x8888
;
break
;
case
PICT_r8g8b8
:
...
...
@@ -1122,20 +1037,12 @@ fbComposite (CARD8 op,
switch
(
pDst
->
format
)
{
case
PICT_a8r8g8b8
:
case
PICT_x8r8g8b8
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeCopyAreammx
;
#endif
break
;
}
case
PICT_x8b8g8r8
:
switch
(
pDst
->
format
)
{
case
PICT_a8b8g8r8
:
case
PICT_x8b8g8r8
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeCopyAreammx
;
#endif
break
;
}
break
;
...
...
@@ -1143,11 +1050,6 @@ fbComposite (CARD8 op,
switch
(
pDst
->
format
)
{
case
PICT_a8b8g8r8
:
case
PICT_x8b8g8r8
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeSrc_8888x8888mmx
;
else
#endif
func
=
fbCompositeSrc_8888x8888
;
break
;
case
PICT_b8g8r8
:
...
...
@@ -1183,11 +1085,6 @@ fbComposite (CARD8 op,
case
PICT_a8r8g8b8
:
switch
(
pDst
->
format
)
{
case
PICT_a8r8g8b8
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeSrcAdd_8888x8888mmx
;
else
#endif
func
=
fbCompositeSrcAdd_8888x8888
;
break
;
}
...
...
@@ -1195,11 +1092,6 @@ fbComposite (CARD8 op,
case
PICT_a8b8g8r8
:
switch
(
pDst
->
format
)
{
case
PICT_a8b8g8r8
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeSrcAdd_8888x8888mmx
;
else
#endif
func
=
fbCompositeSrcAdd_8888x8888
;
break
;
}
...
...
@@ -1207,11 +1099,6 @@ fbComposite (CARD8 op,
case
PICT_a8
:
switch
(
pDst
->
format
)
{
case
PICT_a8
:
#ifdef USE_MMX
if
(
fbHaveMMX
())
func
=
fbCompositeSrcAdd_8000x8000mmx
;
else
#endif
func
=
fbCompositeSrcAdd_8000x8000
;
break
;
}
...
...
@@ -1336,121 +1223,3 @@ fbPictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats)
return
TRUE
;
}
#ifdef USE_MMX
/* The CPU detection code needs to be in a file not compiled with
* "-mmmx -msse", as gcc would generate CMOV instructions otherwise
* that would lead to SIGILL instructions on old CPUs that don't have
* it.
*/
#if !defined(__amd64__) && !defined(__x86_64__)
enum
CPUFeatures
{
NoFeatures
=
0
,
MMX
=
0x1
,
MMX_Extensions
=
0x2
,
SSE
=
0x6
,
SSE2
=
0x8
,
CMOV
=
0x10
};
static
unsigned
int
detectCPUFeatures
(
void
)
{
unsigned
int
result
;
char
vendor
[
13
];
vendor
[
0
]
=
0
;
vendor
[
12
]
=
0
;
/* see p. 118 of amd64 instruction set manual Vol3 */
/* We need to be careful about the handling of %ebx and
* %esp here. We can't declare either one as clobbered
* since they are special registers (%ebx is the "PIC
* register" holding an offset to global data, %esp the
* stack pointer), so we need to make sure they have their+ * original values when we access the output operands.
*/
__asm__
(
"pushf
\n
"
"pop %%eax
\n
"
"mov %%eax, %%ecx
\n
"
"xor $0x00200000, %%eax
\n
"
"push %%eax
\n
"
"popf
\n
"
"pushf
\n
"
"pop %%eax
\n
"
"mov $0x0, %%edx
\n
"
"xor %%ecx, %%eax
\n
"
"jz 1
\n
"
"mov $0x00000000, %%eax
\n
"
"push %%ebx
\n
"
"cpuid
\n
"
"mov %%ebx, %%eax
\n
"
"pop %%ebx
\n
"
"mov %%eax, %1
\n
"
"mov %%edx, %2
\n
"
"mov %%ecx, %3
\n
"
"mov $0x00000001, %%eax
\n
"
"push %%ebx
\n
"
"cpuid
\n
"
"pop %%ebx
\n
"
"1:
\n
"
"mov %%edx, %0
\n
"
:
"=r"
(
result
),
"=m"
(
vendor
[
0
]),
"=m"
(
vendor
[
4
]),
"=m"
(
vendor
[
8
])
:
:
"%eax"
,
"%ecx"
,
"%edx"
);
unsigned
int
features
=
0
;
if
(
result
)
{
/* result now contains the standard feature bits */
if
(
result
&
(
1
<<
15
))
features
|=
CMOV
;
if
(
result
&
(
1
<<
23
))
features
|=
MMX
;
if
(
result
&
(
1
<<
25
))
features
|=
SSE
;
if
(
result
&
(
1
<<
26
))
features
|=
SSE2
;
if
((
result
&
MMX
)
&&
!
(
result
&
SSE
)
&&
(
strcmp
(
vendor
,
"AuthenticAMD"
)
==
0
))
{
/* check for AMD MMX extensions */
unsigned
int
result
;
__asm__
(
"push %%ebx
\n
"
"mov $0x80000000, %%eax
\n
"
"cpuid
\n
"
"xor %%edx, %%edx
\n
"
"cmp $0x1, %%eax
\n
"
"jge 2
\n
"
"mov $0x80000001, %%eax
\n
"
"cpuid
\n
"
"2:
\n
"
"pop %%ebx
\n
"
"mov %%edx, %0
\n
"
:
"=r"
(
result
)
:
:
"%eax"
,
"%ecx"
,
"%edx"
);
if
(
result
&
(
1
<<
22
))
features
|=
MMX_Extensions
;
}
}
return
features
;
}
Bool
fbHaveMMX
(
void
)
{
static
Bool
initialized
=
FALSE
;
static
Bool
mmx_present
;
if
(
!
initialized
)
{
unsigned
int
features
=
detectCPUFeatures
();
mmx_present
=
(
features
&
(
MMX
|
MMX_Extensions
))
==
(
MMX
|
MMX_Extensions
);
initialized
=
TRUE
;
}
return
mmx_present
;
}
#endif
/* __amd64__ */
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment