diff --git a/pkg/pkg.status b/pkg/pkg.status index 2c65a898d7a..818f812471e 100644 --- a/pkg/pkg.status +++ b/pkg/pkg.status @@ -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 diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status index 5245e4500ae..ade646c33e0 100644 --- a/runtime/tests/vm/vm.status +++ b/runtime/tests/vm/vm.status @@ -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 ] diff --git a/runtime/tools/gyp/runtime-configurations.gypi b/runtime/tools/gyp/runtime-configurations.gypi index 4f889871d7f..0b053c4b624 100644 --- a/runtime/tools/gyp/runtime-configurations.gypi +++ b/runtime/tools/gyp/runtime-configurations.gypi @@ -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': { diff --git a/runtime/vm/assembler_arm_test.cc b/runtime/vm/assembler_arm_test.cc index 12f470af2e0..1e6e6efb67f 100644 --- a/runtime/vm/assembler_arm_test.cc +++ b/runtime/vm/assembler_arm_test.cc @@ -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 } diff --git a/runtime/vm/cpu_arm.cc b/runtime/vm/cpu_arm.cc index 491468afa34..edaea94c011 100644 --- a/runtime/vm/cpu_arm.cc +++ b/runtime/vm/cpu_arm.cc @@ -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 diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status index 3605d8afabc..ae94df13ab9 100644 --- a/tests/co19/co19-runtime.status +++ b/tests/co19/co19-runtime.status @@ -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 diff --git a/tests/language/language.status b/tests/language/language.status index 5114a4429fe..b50639b5d3c 100644 --- a/tests/language/language.status +++ b/tests/language/language.status @@ -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 ] diff --git a/tests/lib/lib.status b/tests/lib/lib.status index b0418d5ee50..8afa4cc4fe8 100644 --- a/tests/lib/lib.status +++ b/tests/lib/lib.status @@ -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 ] diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status index 590489e7b04..8b099286145 100644 --- a/tests/standalone/standalone.status +++ b/tests/standalone/standalone.status @@ -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 \ No newline at end of file +io/process_*: Skip # Most use Platform.executable diff --git a/third_party/pkg_tested/pkg_tested.status b/third_party/pkg_tested/pkg_tested.status index 031b82b535c..9a584763d11 100644 --- a/third_party/pkg_tested/pkg_tested.status +++ b/third_party/pkg_tested/pkg_tested.status @@ -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. diff --git a/tools/build.py b/tools/build.py index dac178fbf22..91d68640c21 100755 --- a/tools/build.py +++ b/tools/build.py @@ -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 diff --git a/tools/gyp/configurations.gypi b/tools/gyp/configurations.gypi index 5b55362b119..ddf46471f46 100644 --- a/tools/gyp/configurations.gypi +++ b/tools/gyp/configurations.gypi @@ -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', diff --git a/tools/gyp/configurations_make.gypi b/tools/gyp/configurations_make.gypi index ebaf9359f01..307b1c2b68c 100644 --- a/tools/gyp/configurations_make.gypi +++ b/tools/gyp/configurations_make.gypi @@ -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, diff --git a/tools/gyp/configurations_msvs.gypi b/tools/gyp/configurations_msvs.gypi index 3c859ce89e1..c8b0fd3918a 100644 --- a/tools/gyp/configurations_msvs.gypi +++ b/tools/gyp/configurations_msvs.gypi @@ -24,6 +24,9 @@ 'Dart_Win_simarm_Base': { 'abstract': 1, }, + 'Dart_Win_simarmv6_Base': { + 'abstract': 1, + }, 'Dart_Win_simarmv5te_Base': { 'abstract': 1, }, diff --git a/tools/gyp/configurations_xcode.gypi b/tools/gyp/configurations_xcode.gypi index f7097271216..e3d04b68660 100644 --- a/tools/gyp/configurations_xcode.gypi +++ b/tools/gyp/configurations_xcode.gypi @@ -78,6 +78,9 @@ 'Dart_Macos_simarm_Base': { 'abstract': 1, }, + 'Dart_Macos_simarmv6_Base': { + 'abstract': 1, + }, 'Dart_Macos_simarmv5te_Base': { 'abstract': 1, }, diff --git a/tools/testing/dart/runtime_configuration.dart b/tools/testing/dart/runtime_configuration.dart index 55810eb863c..2978003369e 100644 --- a/tools/testing/dart/runtime_configuration.dart +++ b/tools/testing/dart/runtime_configuration.dart @@ -172,6 +172,8 @@ class DartVmRuntimeConfiguration extends RuntimeConfiguration { switch (arch) { case 'simarm': case 'arm': + case 'simarmv6': + case 'armv6': case' simarmv5te': case 'armv5te': case 'simmips': diff --git a/tools/testing/dart/test_options.dart b/tools/testing/dart/test_options.dart index 92514fe97e7..852e86d1a69 100644 --- a/tools/testing/dart/test_options.dart +++ b/tools/testing/dart/test_options.dart @@ -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', diff --git a/tools/utils.py b/tools/utils.py index aaef94c40c3..f2f07048cba 100644 --- a/tools/utils.py +++ b/tools/utils.py @@ -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':