You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/attributes/codegen.md
+17-18Lines changed: 17 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -634,6 +634,7 @@ trait object whose methods are attributed.
634
634
> [!NOTE]
635
635
> The aforementioned shim for function pointers is necessary because `rustc` implements `track_caller` in a codegen context by appending an implicit parameter to the function ABI, but this would be unsound for an indirect call because the parameter is not a part of the function's type and a given function pointer type may or may not refer to a function with the attribute. The creation of a shim hides the implicit parameter from callers of the function pointer, preserving soundness.
636
636
637
+
<!-- template:attributes -->
637
638
r[attributes.codegen.instruction_set]
638
639
## The `instruction_set` attribute
639
640
@@ -644,44 +645,42 @@ The *`instruction_set` [attribute]* specifies the instruction set that a functio
644
645
> <!-- ignore: arm-only -->
645
646
> ```rust,ignore
646
647
> #[instruction_set(arm::a32)]
647
-
> fn foo_arm_code() {}
648
+
> fn arm_code() {}
648
649
>
649
650
> #[instruction_set(arm::t32)]
650
-
> fn bar_thumb_code() {}
651
+
> fn thumb_code() {}
651
652
> ```
652
653
653
654
r[attributes.codegen.instruction_set.syntax]
654
-
The `instruction_set` attribute uses the [MetaListPaths] syntax, and a path comprised of the architecture family name and instruction set name.
655
+
The `instruction_set` attribute uses the [MetaListPaths] syntax to specify a single path consisting of the architecture family name and instruction set name.
- [Trait definition functions][items.traits] with a body
663
-
- [Closures][expr.closure]
658
+
The `instruction_set` attribute may only be applied to functions, including [closures][expr.closure], [free functions][items.fn], and associated functions defined (i.e. with a body) in [inherent impls][items.associated.fn], [trait impls][items.impl.trait], and [trait definitions][items.traits].
664
659
665
660
> [!NOTE]
666
-
> `rustc` currently ignores `instruction_set` in other positions. This may change in the future.
661
+
> `rustc` ignores use in other positions but lints against it. This may become an error in the future.
667
662
668
663
r[attributes.codegen.instruction_set.duplicates]
669
-
The `instruction_set` attribute may only be specified once on an item.
664
+
The `instruction_set` attribute may be used only once on a function.
The `instruction_set` attribute may only be used with a target that supports the given value.
673
668
669
+
r[attributes.codegen.instruction_set.inline-asm]
670
+
When the `instruction_set` attribute is used, any inline assembly in the function must use the specified instruction set instead of the target default.
671
+
674
672
r[attributes.codegen.instruction_set.arm]
675
673
### `instruction_set` on ARM
676
674
677
-
For the `ARMv4T` and `ARMv5te` architectures, the following are supported:
678
-
* `arm::a32` --- Generate the function as A32 "ARM" code.
679
-
* `arm::t32` --- Generate the function as T32 "Thumb" code.
675
+
When targeting the `ARMv4T` and `ARMv5te` architectures, the supported values for `instruction_set` are:
676
+
677
+
- `arm::a32` --- Generate the function as A32 "ARM" code.
678
+
- `arm::t32` --- Generate the function as T32 "Thumb" code.
680
679
681
-
Using the `instruction_set` attribute has the following effects:
680
+
If the address of the function is taken as a function pointer, the low bit of the address will depend on the selected instruction set:
682
681
683
-
* If the address of the function is taken as a function pointer, the low bit of the address will be set to 0 (arm) or 1 (thumb) depending on the instruction set.
684
-
* Any inline assembly in the function must use the specified instruction set instead of the target default.
0 commit comments