initial import
authorJosh Coalson <jcoalson@users.sourceforce.net>
Wed, 23 May 2001 20:53:31 +0000 (20:53 +0000)
committerJosh Coalson <jcoalson@users.sourceforce.net>
Wed, 23 May 2001 20:53:31 +0000 (20:53 +0000)
include/FLAC/config.h [new file with mode: 0644]
src/libFLAC/cpu.c [new file with mode: 0644]
src/libFLAC/i386/cpu_asm.nasm [new file with mode: 0644]
src/libFLAC/include/private/cpu.h [new file with mode: 0644]

diff --git a/include/FLAC/config.h b/include/FLAC/config.h
new file mode 100644 (file)
index 0000000..e4b5b9b
--- /dev/null
@@ -0,0 +1,53 @@
+/* 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
diff --git a/src/libFLAC/cpu.c b/src/libFLAC/cpu.c
new file mode 100644 (file)
index 0000000..42297fc
--- /dev/null
@@ -0,0 +1,64 @@
+/* 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
+}
diff --git a/src/libFLAC/i386/cpu_asm.nasm b/src/libFLAC/i386/cpu_asm.nasm
new file mode 100644 (file)
index 0000000..7a41252
--- /dev/null
@@ -0,0 +1,53 @@
+; 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
diff --git a/src/libFLAC/include/private/cpu.h b/src/libFLAC/include/private/cpu.h
new file mode 100644 (file)
index 0000000..c8948e9
--- /dev/null
@@ -0,0 +1,62 @@
+/* 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