--- /dev/null
+/* libFLAC - Free Lossless Audio Codec library
+ * Copyright (C) 2001 Josh Coalson
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef FLAC__CONFIG_H
+#define FLAC__CONFIG_H
+
+/* define the correctly-capitalized symbols from the autoconf-crippled ones */
+
+#ifdef FLaC__ALIGN_MALLOC_DATA
+#define FLAC__ALIGN_MALLOC_DATA
+#endif
+
+#ifdef FLaC__NO_ASM
+#define FLAC__NO_ASM
+#endif
+
+#ifdef FLaC__HAS_NASM
+#define FLAC__HAS_NASM
+#endif
+
+#ifdef FLaC__HAS_XMMS
+#define FLAC__HAS_XMMS
+#endif
+
+#ifdef FLaC__CPU_IA32
+#define FLAC__CPU_IA32
+#endif
+
+#ifdef FLaC__CPU_PPC
+#define FLAC__CPU_PPC
+#endif
+
+#ifdef FLaC__CPU_SPARC
+#define FLAC__CPU_SPARC
+#endif
+
+#endif
--- /dev/null
+/* libFLAC - Free Lossless Audio Codec library
+ * Copyright (C) 2001 Josh Coalson
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "FLAC/config.h"
+#include "private/cpu.h"
+#include<stdlib.h>
+#include<stdio.h>
+
+const unsigned FLAC__CPUINFO_IA32_CPUID_CMOV = 0x00008000;
+const unsigned FLAC__CPUINFO_IA32_CPUID_MMX = 0x00800000;
+const unsigned FLAC__CPUINFO_IA32_CPUID_FXSR = 0x01000000;
+const unsigned FLAC__CPUINFO_IA32_CPUID_SSE = 0x02000000;
+const unsigned FLAC__CPUINFO_IA32_CPUID_SSE2 = 0x04000000;
+
+
+void FLAC__cpu_info(FLAC__CPUInfo *info)
+{
+#ifdef FLAC__CPU_IA32
+fprintf(stderr,"@@@ FLAC__CPU_IA32 defined\n");
+ info->type = FLAC__CPUINFO_TYPE_IA32;
+#if !defined FLAC__NO_ASM && defined FLAC__HAS_NASM
+fprintf(stderr,"@@@ !defined FLAC__NO_ASM && defined FLAC__HAS_NASM\n");
+ info->use_asm = true;
+ {
+ unsigned cpuid = FLAC__cpu_info_asm_i386();
+ info->data.ia32.cmov = (cpuid & FLAC__CPUINFO_IA32_CPUID_CMOV)? true : false;
+ info->data.ia32.mmx = (cpuid & FLAC__CPUINFO_IA32_CPUID_MMX)? true : false;
+ info->data.ia32.fxsr = (cpuid & FLAC__CPUINFO_IA32_CPUID_FXSR)? true : false;
+ info->data.ia32.sse = (cpuid & FLAC__CPUINFO_IA32_CPUID_SSE)? true : false;
+ info->data.ia32.sse2 = (cpuid & FLAC__CPUINFO_IA32_CPUID_SSE2)? true : false;
+fprintf(stderr,"@@@ \tcpuid=%08X\n",cpuid);
+fprintf(stderr,"@@@ \tcmov=%u\n",info->data.ia32.cmov);
+fprintf(stderr,"@@@ \tmmx=%u\n",info->data.ia32.mmx);
+fprintf(stderr,"@@@ \tfxsr=%u\n",info->data.ia32.fxsr);
+fprintf(stderr,"@@@ \tsse=%u\n",info->data.ia32.sse);
+fprintf(stderr,"@@@ \tsse2=%u\n",info->data.ia32.sse2);
+ }
+#else
+fprintf(stderr,"@@@ not: !defined FLAC__NO_ASM && defined FLAC__HAS_NASM\n");
+ info->use_asm = true;
+ info->use_asm = false;
+#endif
+#else
+fprintf(stderr,"@@@ FLAC__CPU_UNKNOWN\n");
+ info->type = FLAC__CPUINFO_TYPE_UNKNOWN;
+ info->use_asm = false;
+#endif
+}
--- /dev/null
+; libFLAC - Free Lossless Audio Codec library
+; Copyright (C) 2001 Josh Coalson
+;
+; This library is free software; you can redistribute it and/or
+; modify it under the terms of the GNU Library General Public
+; License as published by the Free Software Foundation; either
+; version 2 of the License, or (at your option) any later version.
+;
+; This library 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
+; Library General Public License for more details.
+;
+; You should have received a copy of the GNU Library General Public
+; License along with this library; if not, write to the
+; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+; Boston, MA 02111-1307, USA.
+
+%include "nasm.h"
+
+ data_section
+
+cglobal FLAC__cpu_info_asm_i386
+
+ code_section
+
+; **********************************************************************
+;
+FLAC__cpu_info_asm_i386:
+
+ push ebx
+
+ pushfd
+ pop eax
+ mov edx, eax
+ xor eax, 00200000h
+ push eax
+ popfd
+ pushfd
+ pop eax
+ cmp eax, edx
+ jz .no_cpuid
+ mov eax, 1
+ cpuid
+ mov eax, edx
+ jmp short .end
+.no_cpuid:
+ xor eax, eax ; return 0
+.end:
+ pop ebx
+ ret
+
+end
--- /dev/null
+/* libFLAC - Free Lossless Audio Codec library
+ * Copyright (C) 2001 Josh Coalson
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef FLAC__PRIVATE__CPU_H
+#define FLAC__PRIVATE__CPU_H
+
+#include "FLAC/config.h"
+#include "FLAC/ordinals.h"
+
+typedef enum {
+ FLAC__CPUINFO_TYPE_IA32,
+ FLAC__CPUINFO_TYPE_UNKNOWN
+} FLAC__CPUInfo_Type;
+
+typedef struct {
+ bool cmov;
+ bool mmx;
+ bool fxsr;
+ bool sse;
+ bool sse2;
+} FLAC__CPUInfo_IA32;
+extern const unsigned FLAC__CPUINFO_IA32_CPUID_CMOV;
+extern const unsigned FLAC__CPUINFO_IA32_CPUID_MMX;
+extern const unsigned FLAC__CPUINFO_IA32_CPUID_FXSR;
+extern const unsigned FLAC__CPUINFO_IA32_CPUID_SSE;
+extern const unsigned FLAC__CPUINFO_IA32_CPUID_SSE2;
+
+typedef struct {
+ bool use_asm;
+ FLAC__CPUInfo_Type type;
+ union {
+ FLAC__CPUInfo_IA32 ia32;
+ } data;
+} FLAC__CPUInfo;
+
+void FLAC__cpu_info(FLAC__CPUInfo *info);
+
+#ifndef FLAC__NO_ASM
+#ifdef FLAC__CPU_IA32
+#ifdef FLAC__HAS_NASM
+unsigned FLAC__cpu_info_asm_i386();
+#endif
+#endif
+#endif
+
+#endif