Mauro Carvalho Chehab | b693d0b | 2019-06-12 14:52:38 -0300 | [diff] [blame^] | 1 | =================== |
| 2 | Legacy instructions |
| 3 | =================== |
| 4 | |
Punit Agrawal | 587064b | 2014-11-18 11:41:24 +0000 | [diff] [blame] | 5 | The arm64 port of the Linux kernel provides infrastructure to support |
| 6 | emulation of instructions which have been deprecated, or obsoleted in |
| 7 | the architecture. The infrastructure code uses undefined instruction |
| 8 | hooks to support emulation. Where available it also allows turning on |
| 9 | the instruction execution in hardware. |
| 10 | |
| 11 | The emulation mode can be controlled by writing to sysctl nodes |
| 12 | (/proc/sys/abi). The following explains the different execution |
| 13 | behaviours and the corresponding values of the sysctl nodes - |
| 14 | |
| 15 | * Undef |
Mauro Carvalho Chehab | b693d0b | 2019-06-12 14:52:38 -0300 | [diff] [blame^] | 16 | Value: 0 |
| 17 | |
Punit Agrawal | 587064b | 2014-11-18 11:41:24 +0000 | [diff] [blame] | 18 | Generates undefined instruction abort. Default for instructions that |
| 19 | have been obsoleted in the architecture, e.g., SWP |
| 20 | |
| 21 | * Emulate |
Mauro Carvalho Chehab | b693d0b | 2019-06-12 14:52:38 -0300 | [diff] [blame^] | 22 | Value: 1 |
| 23 | |
Punit Agrawal | 587064b | 2014-11-18 11:41:24 +0000 | [diff] [blame] | 24 | Uses software emulation. To aid migration of software, in this mode |
| 25 | usage of emulated instruction is traced as well as rate limited |
| 26 | warnings are issued. This is the default for deprecated |
| 27 | instructions, .e.g., CP15 barriers |
| 28 | |
| 29 | * Hardware Execution |
Mauro Carvalho Chehab | b693d0b | 2019-06-12 14:52:38 -0300 | [diff] [blame^] | 30 | Value: 2 |
| 31 | |
Punit Agrawal | 587064b | 2014-11-18 11:41:24 +0000 | [diff] [blame] | 32 | Although marked as deprecated, some implementations may support the |
| 33 | enabling/disabling of hardware support for the execution of these |
| 34 | instructions. Using hardware execution generally provides better |
| 35 | performance, but at the loss of ability to gather runtime statistics |
| 36 | about the use of the deprecated instructions. |
| 37 | |
| 38 | The default mode depends on the status of the instruction in the |
| 39 | architecture. Deprecated instructions should default to emulation |
| 40 | while obsolete instructions must be undefined by default. |
Punit Agrawal | bd35a4a | 2014-11-18 11:41:25 +0000 | [diff] [blame] | 41 | |
Suzuki K. Poulose | 2d888f4 | 2015-01-21 12:43:11 +0000 | [diff] [blame] | 42 | Note: Instruction emulation may not be possible in all cases. See |
| 43 | individual instruction notes for further information. |
| 44 | |
Punit Agrawal | bd35a4a | 2014-11-18 11:41:25 +0000 | [diff] [blame] | 45 | Supported legacy instructions |
| 46 | ----------------------------- |
| 47 | * SWP{B} |
Mauro Carvalho Chehab | b693d0b | 2019-06-12 14:52:38 -0300 | [diff] [blame^] | 48 | |
| 49 | :Node: /proc/sys/abi/swp |
| 50 | :Status: Obsolete |
| 51 | :Default: Undef (0) |
Punit Agrawal | c852f32 | 2014-11-18 11:41:26 +0000 | [diff] [blame] | 52 | |
| 53 | * CP15 Barriers |
Mauro Carvalho Chehab | b693d0b | 2019-06-12 14:52:38 -0300 | [diff] [blame^] | 54 | |
| 55 | :Node: /proc/sys/abi/cp15_barrier |
| 56 | :Status: Deprecated |
| 57 | :Default: Emulate (1) |
Suzuki K. Poulose | 2d888f4 | 2015-01-21 12:43:11 +0000 | [diff] [blame] | 58 | |
| 59 | * SETEND |
Mauro Carvalho Chehab | b693d0b | 2019-06-12 14:52:38 -0300 | [diff] [blame^] | 60 | |
| 61 | :Node: /proc/sys/abi/setend |
| 62 | :Status: Deprecated |
| 63 | :Default: Emulate (1)* |
| 64 | |
| 65 | Note: All the cpus on the system must have mixed endian support at EL0 |
| 66 | for this feature to be enabled. If a new CPU - which doesn't support mixed |
| 67 | endian - is hotplugged in after this feature has been enabled, there could |
| 68 | be unexpected results in the application. |