Skip to content

[Mobile] MLAS_PLATFORM reading AA64ISAR0_EL1 causes SIGILL on older Android devices #17851

Description

@john-dance

Describe the issue

PR #16082 introduced reading AA64ISAR0_EL1 to check dot product support. This was later reported as failing on the Apple M1 (see #16496) and fixed in PR #16763.

See platform.cpp
asm("mrs %[reg], ID_AA64ISAR0_EL1\n" : [reg] "=r"(isar0_el1) : :);

The instruction also fails on older Android Devices
Google Pixel 3 / Snapdragon 845 / Android 12
Samsung Galaxy A6 2018 / Cortex-A53 ( Armv8-A) / Android 10

The developer page for the AA64ISAR0_EL1 register seems to reference v8.2 for the valid values that the code is checking.

https://developer.arm.com/documentation/ddi0601/2023-09/AArch64-Registers/ID-AA64ISAR0-EL1--AArch64-Instruction-Set-Attribute-Register-0

This code path needs to be changed for older ARM devices in addition to the Apple M1.

To reproduce

Run a sample that initializes MLAS_PLATFORM on an older device such as the Pixel 3 or Samsung Galaxy A6.

Urgency

No response

Platform

Android

OS Version

Failed on both Android 10 and Android 12

ONNX Runtime Installation

Built from Source

Compiler Version (if 'Built from Source')

n/a - code is assembly

Package Name (if 'Released Package')

None

ONNX Runtime Version or Commit ID

1.16.0

ONNX Runtime API

C++/C

Architecture

X64

Execution Provider

Default CPU

Execution Provider Library Version

n/a

Metadata

Metadata

Assignees

No one assigned

    Labels

    platform:mobileissues related to ONNX Runtime mobile; typically submitted using template

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions