Bug 555045: Add regression test (r=cpeyer)
[tamarin-stm.git] / nanojit / njconfig.cpp
blobe0f8c51115a6589a0a96a99f5259d8338ef0aefe
1 /* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
2 /* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
3 /* ***** BEGIN LICENSE BLOCK *****
4 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
6 * The contents of this file are subject to the Mozilla Public License Version
7 * 1.1 (the "License"); you may not use this file except in compliance with
8 * the License. You may obtain a copy of the License at
9 * http://www.mozilla.org/MPL/
11 * Software distributed under the License is distributed on an "AS IS" basis,
12 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13 * for the specific language governing rights and limitations under the
14 * License.
16 * The Original Code is [Open Source Virtual Machine].
18 * The Initial Developer of the Original Code is
19 * Adobe System Incorporated.
20 * Portions created by the Initial Developer are Copyright (C) 2004-2007
21 * the Initial Developer. All Rights Reserved.
23 * Contributor(s):
24 * Adobe AS3 Team
26 * Alternatively, the contents of this file may be used under the terms of
27 * either the GNU General Public License Version 2 or later (the "GPL"), or
28 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
29 * in which case the provisions of the GPL or the LGPL are applicable instead
30 * of those above. If you wish to allow use of your version of this file only
31 * under the terms of either the GPL or the LGPL, and not to allow others to
32 * use your version of this file under the terms of the MPL, indicate your
33 * decision by deleting the provisions above and replace them with the notice
34 * and other provisions required by the GPL or the LGPL. If you do not delete
35 * the provisions above, a recipient may use your version of this file under
36 * the terms of any one of the MPL, the GPL or the LGPL.
38 * ***** END LICENSE BLOCK ***** */
40 #include "nanojit.h"
42 #ifdef FEATURE_NANOJIT
44 namespace nanojit
46 #ifdef NANOJIT_IA32
47 static bool CheckForSSE2()
49 int features = 0;
50 #if defined _MSC_VER
51 __asm
53 pushad
54 mov eax, 1
55 cpuid
56 mov features, edx
57 popad
59 #elif defined __GNUC__
60 asm("xchg %%esi, %%ebx\n" /* we can't clobber ebx on gcc (PIC register) */
61 "mov $0x01, %%eax\n"
62 "cpuid\n"
63 "mov %%edx, %0\n"
64 "xchg %%esi, %%ebx\n"
65 : "=m" (features)
66 : /* We have no inputs */
67 : "%eax", "%esi", "%ecx", "%edx"
69 #elif defined __SUNPRO_C || defined __SUNPRO_CC
70 asm("push %%ebx\n"
71 "mov $0x01, %%eax\n"
72 "cpuid\n"
73 "pop %%ebx\n"
74 : "=d" (features)
75 : /* We have no inputs */
76 : "%eax", "%ecx"
78 #endif
79 return (features & (1<<26)) != 0;
81 #endif
83 Config::Config()
85 VMPI_memset(this, 0, sizeof(*this));
87 cseopt = true;
89 #ifdef NANOJIT_IA32
90 i386_sse2 = CheckForSSE2();
91 i386_use_cmov = true;
92 i386_fixed_esp = false;
93 #endif
95 #if defined(NANOJIT_ARM)
97 // XXX: temporarily disabled, see bug 547063.
98 //NanoStaticAssert(NJ_COMPILER_ARM_ARCH >= 5 && NJ_COMPILER_ARM_ARCH <= 7);
100 arm_arch = NJ_COMPILER_ARM_ARCH;
101 arm_vfp = (arm_arch >= 7);
103 #if defined(DEBUG) || defined(_DEBUG)
104 arm_show_stats = true;
105 #else
106 arm_show_stats = false;
107 #endif
109 soft_float = !arm_vfp;
111 #endif // NANOJIT_ARM
114 #endif /* FEATURE_NANOJIT */