Adds targets for simarmv6 and armv6

related #25562

R=rmacnak@google.com

Review URL: https://codereview.chromium.org/1624593002 .
This commit is contained in:
Zachary Anderson 2016-01-22 13:07:48 -08:00
parent 771fea4502
commit 80f358dede
18 changed files with 182 additions and 17 deletions

View file

@ -157,7 +157,7 @@ observe/test/transformer_test: Fail, OK # Uses dart:io.
observe/test/unique_message_test: SkipByDesign # Uses dart:io.
dart_messages/test/dart_messages_test: Skip # Uses dart:io.
[ $runtime == vm && ($arch == simarm64 || $arch == simarm || $arch == simarmv5te || $arch == simmips || $arch == armv5te) ]
[ $runtime == vm && ($arch == simarm64 || $arch == simarm || $arch == simarmv6 || $arch == simarmv5te || $arch == simmips || $arch == armv6 || $arch == armv5te) ]
# Timeout. These are not unit tests. They do not run efficiently on our
# simulator or low-end devices.
*: Skip

View file

@ -33,7 +33,7 @@ cc/Service_Profile: Skip
cc/Dart2JSCompilerStats: Skip
cc/CorelibCompilerStats: Skip
[ $arch == simarm || $arch == simarmv5te || $arch == simarm64 || $arch == simmips ]
[ $arch == simarm || $arch == simarmv6 || $arch == simarmv5te || $arch == simarm64 || $arch == simmips ]
cc/Service_Profile: Skip
[ $arch == arm ]

View file

@ -92,6 +92,20 @@
},
},
'Dart_simarmv6_Base': {
'abstract': 1,
'xcode_settings': {
'ARCHS': [ 'i386' ],
},
},
'Dart_simarmv5te_Base': {
'abstract': 1,
'xcode_settings': {
'ARCHS': [ 'i386' ],
},
},
'Dart_simmips_Base': {
'abstract': 1,
'xcode_settings': {

View file

@ -1798,10 +1798,20 @@ ASSEMBLER_TEST_GENERATE(IntDiv_supported, assembler) {
ASSEMBLER_TEST_RUN(IntDiv_supported, test) {
EXPECT(test != NULL);
#if defined(USING_SIMULATOR)
bool orig = TargetCPUFeatures::integer_division_supported();
HostCPUFeatures::set_integer_division_supported(true);
if (TargetCPUFeatures::can_divide()) {
typedef int (*Tst)() DART_UNUSED;
EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
}
HostCPUFeatures::set_integer_division_supported(orig);
#else
if (TargetCPUFeatures::can_divide()) {
typedef int (*Tst)() DART_UNUSED;
EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
}
#endif
}
@ -1829,10 +1839,20 @@ ASSEMBLER_TEST_GENERATE(IntDiv_unsupported, assembler) {
ASSEMBLER_TEST_RUN(IntDiv_unsupported, test) {
EXPECT(test != NULL);
#if defined(USING_SIMULATOR)
bool orig = TargetCPUFeatures::integer_division_supported();
HostCPUFeatures::set_integer_division_supported(false);
if (TargetCPUFeatures::can_divide()) {
typedef int (*Tst)() DART_UNUSED;
EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
}
HostCPUFeatures::set_integer_division_supported(orig);
#else
if (TargetCPUFeatures::can_divide()) {
typedef int (*Tst)() DART_UNUSED;
EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
}
#endif
}

View file

@ -56,10 +56,14 @@
namespace dart {
// TODO(zra): Add a target for ARMv6.
#if defined(TARGET_ARCH_ARM_5TE)
DEFINE_FLAG(bool, use_vfp, false, "Use vfp instructions if supported");
DEFINE_FLAG(bool, use_neon, false, "Use neon instructions if supported");
DEFINE_FLAG(bool, use_integer_division, false,
"Use integer division instruction if supported");
#elif defined(TARGET_ARCH_ARM_6)
DEFINE_FLAG(bool, use_vfp, true, "Use vfp instructions if supported");
DEFINE_FLAG(bool, use_neon, false, "Use neon instructions if supported");
DEFINE_FLAG(bool, use_integer_division, false,
"Use integer division instruction if supported");
#else
@ -242,6 +246,8 @@ void HostCPUFeatures::InitOnce() {
#if defined(TARGET_ARCH_ARM_5TE)
arm_version_ = ARMv5TE;
#elif defined(TARGET_ARCH_ARM_6)
arm_version_ = ARMv6;
#else
arm_version_ = ARMv7;
#endif

View file

@ -74,7 +74,7 @@ LibTest/collection/ListBase/ListBase_class_A01_t02: Skip # co19 issue 673
LibTest/isolate/Isolate/spawnUri_A01_t04: Crash, Pass # Issue 17440
LibTest/isolate/Isolate/spawn_A01_t04: Crash, Pass # Issue 17440
[ ($compiler == none || $compiler == precompiler) && ($runtime == vm || $runtime == dart_precompiled) && ($arch == simarm || $arch == simarmv5te || $arch == simmips || $arch == simarm64) ]
[ ($compiler == none || $compiler == precompiler) && ($runtime == vm || $runtime == dart_precompiled) && ($arch == simarm || $arch == simarmv6 || $arch == simarmv5te || $arch == simmips || $arch == simarm64) ]
LibTest/core/Uri/Uri_A06_t03: Skip # Timeout
LibTest/collection/ListMixin/ListMixin_class_A01_t01: Skip # Timeout
LibTest/collection/ListBase/ListBase_class_A01_t01: Skip # Timeout

View file

@ -104,7 +104,7 @@ large_class_declaration_test: SkipSlow # Times out. Issue 20352
[ ($compiler == none || $compiler == precompiler) && $runtime == ContentShellOnAndroid ]
gc_test: SkipSlow # Times out flakily. Issue 20956
[ ($compiler == none || $compiler == precompiler) && ($runtime == vm || $runtime == dart_precompiled) && ( $arch == simarm || $arch == arm || $arch == simarmv5te || $arch == armv5te || $arch == simarm64 || $arch == arm64 || $arch == simmips || $arch == mips) ]
[ ($compiler == none || $compiler == precompiler) && ($runtime == vm || $runtime == dart_precompiled) && ( $arch == simarm || $arch == arm || $arch == simarmv6 || $arch == armv6 || $arch == simarmv5te || $arch == armv5te || $arch == simarm64 || $arch == arm64 || $arch == simmips || $arch == mips) ]
vm/load_to_load_unaligned_forwarding_vm_test: Pass, Crash # Unaligned offset. Issue 22151
[ ($compiler == none || $compiler == precompiler) && $runtime == dartium ]

View file

@ -308,7 +308,7 @@ mirrors/native_class_test: Pass, Slow
[ ($compiler == none || $compiler == precompiler) && $arch == mips ]
async/timer_regress22626_test: Pass, RuntimeError # Issue 22626
[ $arch == simarm || $arch == simarmv5te ]
[ $arch == simarm || $arch == simarmv6 || $arch == simarmv5te ]
convert/chunked_conversion_utf88_test: Skip # Pass, Slow Issue 12644.
convert/utf85_test: Skip # Pass, Slow Issue 12644.
@ -331,7 +331,7 @@ convert/streamed_conversion_json_utf8_decode_test: Pass, Slow
[ ($runtime == vm || $runtime == dart_precompiled) && $mode == release && $arch == ia32 && $system == windows ]
convert/json_test: RuntimeError # Issue 24908
[ $mode == debug && $arch != ia32 && $arch != x64 && $arch != simarm && $arch != simarmv5te ]
[ $mode == debug && $arch != ia32 && $arch != x64 && $arch != simarm && $arch != simarmv6 && $arch != simarmv5te ]
convert/streamed_conversion_json_utf8_decode_test: Skip # Verification not yet implemented.
[ ($runtime == vm || $runtime == dart_precompiled) && $mode == debug && $builder_tag == asan ]

View file

@ -140,7 +140,7 @@ oom_error_stacktrace_test: Pass # The test only fails at runtime.
[ $compiler == dart2js && $browser ]
*: Skip
[ $arch == simarm || $arch == simarmv5te || $arch == simmips ]
[ $arch == simarm || $arch == simarmv6 || $arch == simarmv5te || $arch == simmips ]
out_of_memory_test: Skip # passes on Mac, crashes on Linux
oom_error_stacktrace_test: Skip # Fails on Linux
@ -268,4 +268,4 @@ io/raw_socket_cross_process_test: RuntimeError # Platform.executable
io/test_extension_test: RuntimeError # Platform.executable
io/regress_7679_test: RuntimeError # Platform.executable
io/process_*: Skip # Most use Platform.executable
io/process_*: Skip # Most use Platform.executable

View file

@ -23,7 +23,7 @@ pub/*: SkipByDesign
pub/test/run/app_can_read_from_stdin_test: Fail # Issue 19448
pub/test/run/forwards_signal_posix_test: SkipByDesign
[ $runtime == vm && ($mode == debug || $arch == mips || $arch == simmips || $arch == simarm || $arch == simarmv5te || $arch == simarm64 || $builder_tag == asan) ]
[ $runtime == vm && ($mode == debug || $arch == mips || $arch == simmips || $arch == simarm || $arch == simarmv6 || $arch == simarmv5te || $arch == simarm64 || $builder_tag == asan) ]
dart_style/test/command_line_test: Skip # The test controller does not take into account that tests take much longer in debug mode or on simulators/mips.
dart_style/test/formatter_test: Skip # The test controller does not take into account that tests take much longer in debug mode or on simulators/mips.

View file

@ -55,8 +55,8 @@ def BuildOptions():
default=False, action="store_true")
result.add_option("-a", "--arch",
help='Target architectures (comma-separated).',
metavar='[all,ia32,x64,simarm,arm,simarmv5te,armv5te,simmips,mips'
',simarm64,arm64,]',
metavar='[all,ia32,x64,simarm,arm,simarmv6,armv6,simarmv5te,armv5te,'
'simmips,mips,simarm64,arm64,]',
default=utils.GuessArchitecture())
result.add_option("--os",
help='Target OSs (comma-separated).',
@ -101,8 +101,8 @@ def ProcessOptions(options, args):
print "Unknown mode %s" % mode
return False
for arch in options.arch:
archs = ['ia32', 'x64', 'simarm', 'arm', 'simarmv5te', 'armv5te', 'simmips',
'mips', 'simarm64', 'arm64',]
archs = ['ia32', 'x64', 'simarm', 'arm', 'simarmv6', 'armv6',
'simarmv5te', 'armv5te', 'simmips', 'mips', 'simarm64', 'arm64',]
if not arch in archs:
print "Unknown arch %s" % arch
return False
@ -119,7 +119,7 @@ def ProcessOptions(options, args):
print ("Cross-compilation to %s is not supported on host os %s."
% (os_name, HOST_OS))
return False
if not arch in ['ia32', 'arm', 'armv5te', 'arm64', 'mips']:
if not arch in ['ia32', 'arm', 'armv6', 'armv5te', 'arm64', 'mips']:
print ("Cross-compilation to %s is not supported for architecture %s."
% (os_name, arch))
return False

View file

@ -17,9 +17,11 @@
['"<(target_arch)"=="ia32"', { 'dart_target_arch': 'IA32', }],
['"<(target_arch)"=="x64"', { 'dart_target_arch': 'X64', }],
['"<(target_arch)"=="arm"', { 'dart_target_arch': 'ARM', }],
['"<(target_arch)"=="armv6"', { 'dart_target_arch': 'ARMV6', }],
['"<(target_arch)"=="armv5te"', { 'dart_target_arch': 'ARMV5TE', }],
['"<(target_arch)"=="arm64"', { 'dart_target_arch': 'ARM64', }],
['"<(target_arch)"=="simarm"', { 'dart_target_arch': 'SIMARM', }],
['"<(target_arch)"=="simarmv6"', { 'dart_target_arch': 'SIMARMV6', }],
['"<(target_arch)"=="simarmv5te"', { 'dart_target_arch': 'SIMARMV5TE', }],
['"<(target_arch)"=="simarm64"', { 'dart_target_arch': 'SIMARM64', }],
['"<(target_arch)"=="mips"', { 'dart_target_arch': 'MIPS', }],
@ -63,6 +65,14 @@
]
},
'Dart_simarmv6_Base': {
'abstract': 1,
'defines': [
'TARGET_ARCH_ARM',
'TARGET_ARCH_ARM_6',
]
},
'Dart_simarmv5te_Base': {
'abstract': 1,
'defines': [
@ -78,6 +88,14 @@
],
},
'Dart_armv6_Base': {
'abstract': 1,
'defines': [
'TARGET_ARCH_ARM',
'TARGET_ARCH_ARM_6',
],
},
'Dart_armv5te_Base': {
'abstract': 1,
'defines': [
@ -184,6 +202,27 @@
],
},
'DebugSIMARMV6': {
'inherit_from': [
'Dart_Base', 'Dart_simarmv6_Base', 'Dart_Debug',
'Dart_<(dart_target_os)_Base',
'Dart_<(dart_target_os)_simarmv6_Base',
'Dart_<(dart_target_os)_Debug',
],
'defines': [
'DEBUG',
],
},
'ReleaseSIMARMV6': {
'inherit_from': [
'Dart_Base', 'Dart_simarmv6_Base', 'Dart_Release',
'Dart_<(dart_target_os)_Base',
'Dart_<(dart_target_os)_simarmv6_Base',
'Dart_<(dart_target_os)_Release',
],
},
'DebugSIMARMV5TE': {
'inherit_from': [
'Dart_Base', 'Dart_simarmv5te_Base', 'Dart_Debug',
@ -285,6 +324,42 @@
],
},
'DebugXARMV6': {
'inherit_from': [
'Dart_Base', 'Dart_armv6_Base', 'Dart_Debug',
'Dart_Linux_Base',
'Dart_Linux_xarmv6_Base',
'Dart_Linux_Debug',
],
},
'ReleaseXARMV6': {
'inherit_from': [
'Dart_Base', 'Dart_armv6_Base', 'Dart_Release',
'Dart_Linux_Base',
'Dart_Linux_xarmv6_Base',
'Dart_Linux_Release',
],
},
'DebugARMV6': {
'inherit_from': [
'Dart_Base', 'Dart_armv6_Base', 'Dart_Debug',
'Dart_Linux_Base',
'Dart_Linux_armv6_Base',
'Dart_Linux_Debug',
],
},
'ReleaseARMV6': {
'inherit_from': [
'Dart_Base', 'Dart_armv6_Base', 'Dart_Release',
'Dart_Linux_Base',
'Dart_Linux_armv6_Base',
'Dart_Linux_Release',
],
},
'DebugXARMV5TE': {
'inherit_from': [
'Dart_Base', 'Dart_armv5te_Base', 'Dart_Debug',

View file

@ -76,6 +76,12 @@
'ldflags': [ '-m32', ],
},
'Dart_Linux_simarmv6_Base': {
'abstract': 1,
'cflags': [ '-O3', '-m32', '-msse2', '-mfpmath=sse' ],
'ldflags': [ '-m32', ],
},
'Dart_Linux_simarmv5te_Base': {
'abstract': 1,
'cflags': [ '-O3', '-m32', '-msse2', '-mfpmath=sse' ],
@ -117,6 +123,35 @@
],
},
# ARMv6 cross-build
'Dart_Linux_xarmv6_Base': {
'abstract': 1,
'target_conditions': [
['_toolset=="target"', {
'cflags': [
'-march=armv6',
'-mfpu=vfp',
'-Wno-psabi', # suppresses va_list warning
'-fno-strict-overflow',
],
}],
['_toolset=="host"', {
'cflags': ['-m32', '-msse2', '-mfpmath=sse' ],
'ldflags': ['-m32'],
}]]
},
# ARMv6 native build
'Dart_Linux_armv6_Base': {
'abstract': 1,
'cflags': [
'-march=armv6',
'-mfpu=vfp',
'-Wno-psabi', # suppresses va_list warning
'-fno-strict-overflow',
],
},
# ARMv5 cross-build
'Dart_Linux_xarmv5te_Base': {
'abstract': 1,

View file

@ -24,6 +24,9 @@
'Dart_Win_simarm_Base': {
'abstract': 1,
},
'Dart_Win_simarmv6_Base': {
'abstract': 1,
},
'Dart_Win_simarmv5te_Base': {
'abstract': 1,
},

View file

@ -78,6 +78,9 @@
'Dart_Macos_simarm_Base': {
'abstract': 1,
},
'Dart_Macos_simarmv6_Base': {
'abstract': 1,
},
'Dart_Macos_simarmv5te_Base': {
'abstract': 1,
},

View file

@ -172,6 +172,8 @@ class DartVmRuntimeConfiguration extends RuntimeConfiguration {
switch (arch) {
case 'simarm':
case 'arm':
case 'simarmv6':
case 'armv6':
case' simarmv5te':
case 'armv5te':
case 'simmips':

View file

@ -108,8 +108,8 @@ class TestOptionsParser {
'arch',
'The architecture to run tests for',
['-a', '--arch'],
['all', 'ia32', 'x64', 'arm', 'armv5te', 'arm64', 'mips',
'simarm', 'simarmv5te', 'simarm64', 'simmips'],
['all', 'ia32', 'x64', 'arm', 'armv6', 'armv5te', 'arm64', 'mips',
'simarm', 'simarmv6', 'simarmv5te', 'simarm64', 'simmips'],
'x64'),
new _TestOptionSpecification(
'system',

View file

@ -52,6 +52,8 @@ def GuessArchitecture():
os_id = platform.machine()
if os_id.startswith('armv5te'):
return 'armv5te'
elif os_id.startswith('armv6'):
return 'armv6'
elif os_id.startswith('arm'):
return 'arm'
elif os_id.startswith('aarch64'):
@ -228,10 +230,12 @@ ARCH_FAMILY = {
'ia32': 'ia32',
'x64': 'ia32',
'arm': 'arm',
'armv6': 'arm',
'armv5te': 'arm',
'arm64': 'arm',
'mips': 'mips',
'simarm': 'ia32',
'simarmv6': 'ia32',
'simarmv5te': 'ia32',
'simmips': 'ia32',
'simarm64': 'ia32',
@ -581,6 +585,9 @@ def DartBinary():
# TODO(zra): This binary does not exist, yet. Check one in once we have
# sufficient stability.
return os.path.join(dart_binary_prefix, system, 'dart-armv5te')
elif arch == 'armv6':
# TODO(zra): Ditto.
return os.path.join(dart_binary_prefix, system, 'dart-armv6')
elif arch == 'arm':
return os.path.join(dart_binary_prefix, system, 'dart-arm')
elif arch == 'arm64':