diff --git a/gcc/config/aarch64/aarch64-builtins.c b/gcc/config/aarch64/aarch64-builtins.c
index d7b1b7bd6867a0f98a2f67fec0fd80a0a08f69c1..f05f9aa54b5d66e7ff6bfcd7104bf0af14b0a431 100644
--- a/gcc/config/aarch64/aarch64-builtins.c
+++ b/gcc/config/aarch64/aarch64-builtins.c
@@ -436,6 +436,12 @@ enum aarch64_builtins
   /* Special cased Armv8.3-A Complex FMA by Lane quad Builtins.  */
   AARCH64_SIMD_FCMLA_LANEQ_BUILTIN_BASE,
   AARCH64_SIMD_FCMLA_LANEQ_BUILTINS
+  /* System Hint Operation Builtins for AArch64.  */
+  AARCH64_BUILTIN_YIELD,
+  AARCH64_BUILTIN_WFE,
+  AARCH64_BUILTIN_WFI,
+  AARCH64_BUILTIN_SEV,
+  AARCH64_BUILTIN_SEVL,
   AARCH64_BUILTIN_MAX
 };
 
@@ -1057,6 +1063,35 @@ aarch64_init_pauth_hint_builtins (void)
 			    NULL_TREE);
 }
 
+/* System Hint Operation builtins for AArch64.  */
+void
+aarch64_init_syshintop_builtins (void)
+{
+  tree vtype_node
+    = build_function_type_list (void_type_node, NULL);
+
+  aarch64_builtin_decls[AARCH64_BUILTIN_YIELD]
+    = add_builtin_function ("__builtin_aarch64_yield", vtype_node,
+                            AARCH64_BUILTIN_YIELD, BUILT_IN_MD, NULL,
+                            NULL_TREE);
+  aarch64_builtin_decls[AARCH64_BUILTIN_WFE]
+    = add_builtin_function ("__builtin_aarch64_wfe", vtype_node,
+                            AARCH64_BUILTIN_WFE, BUILT_IN_MD, NULL,
+                            NULL_TREE);
+  aarch64_builtin_decls[AARCH64_BUILTIN_WFI]
+    = add_builtin_function ("__builtin_aarch64_wfi", vtype_node,
+                            AARCH64_BUILTIN_WFI, BUILT_IN_MD, NULL,
+                            NULL_TREE);
+  aarch64_builtin_decls[AARCH64_BUILTIN_SEV]
+    = add_builtin_function ("__builtin_aarch64_sev", vtype_node,
+                            AARCH64_BUILTIN_SEV, BUILT_IN_MD, NULL,
+                            NULL_TREE);
+  aarch64_builtin_decls[AARCH64_BUILTIN_SEVL]
+    = add_builtin_function ("__builtin_aarch64_sevl", vtype_node,
+                            AARCH64_BUILTIN_SEVL, BUILT_IN_MD, NULL,
+                            NULL_TREE);
+}
+
 void
 aarch64_init_builtins (void)
 {
@@ -1094,6 +1129,7 @@ aarch64_init_builtins (void)
      register them.  */
   if (!TARGET_ILP32)
     aarch64_init_pauth_hint_builtins ();
+  aarch64_init_syshintop_builtins ();
 }
 
 tree
@@ -1576,6 +1612,26 @@ aarch64_expand_builtin (tree exp,
 
       return target;
 
+    case AARCH64_BUILTIN_YIELD:
+      emit_insn (GEN_FCN (CODE_FOR_yield) ());
+      return gen_reg_rtx (VOIDmode);
+
+    case AARCH64_BUILTIN_WFE:
+      emit_insn (GEN_FCN (CODE_FOR_wfe) ());
+      return gen_reg_rtx (VOIDmode);
+
+    case AARCH64_BUILTIN_WFI:
+      emit_insn (GEN_FCN (CODE_FOR_wfi) ());
+      return gen_reg_rtx (VOIDmode);
+
+    case AARCH64_BUILTIN_SEV:
+      emit_insn (GEN_FCN (CODE_FOR_sev) ());
+      return gen_reg_rtx (VOIDmode);
+
+    case AARCH64_BUILTIN_SEVL:
+      emit_insn (GEN_FCN (CODE_FOR_sevl) ());
+      return gen_reg_rtx (VOIDmode);
+
     case AARCH64_SIMD_BUILTIN_FCMLA_LANEQ0_V2SF:
     case AARCH64_SIMD_BUILTIN_FCMLA_LANEQ90_V2SF:
     case AARCH64_SIMD_BUILTIN_FCMLA_LANEQ180_V2SF:
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 5a1894063a1ed2db1cc947c9c449d48808ed96ae..12135d16f5f0993238a584eaa8c94ffd5ca55e44 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -242,6 +242,11 @@
     UNSPECV_BLOCKAGE		; Represent a blockage
     UNSPECV_PROBE_STACK_RANGE	; Represent stack range probing.
     UNSPECV_SPECULATION_BARRIER ; Represent speculation barrier.
+    UNSPECV_YIELD		; Represent yield instruction.
+    UNSPECV_WFE			; Represent wfe instruction.
+    UNSPECV_WFI			; Represent wfi instruction.
+    UNSPECV_SEV			; Represent sev instruction.
+    UNSPECV_SEVL		; Represent sevl instruction.
     UNSPECV_BTI_NOARG		; Represent BTI.
     UNSPECV_BTI_C		; Represent BTI c.
     UNSPECV_BTI_J		; Represent BTI j.
@@ -668,6 +673,41 @@
   [(set_attr "type" "no_insn")]
 )
 
+(define_insn "yield"
+  [(unspec_volatile [(const_int 0)] UNSPECV_YIELD)]
+  ""
+  "yield"
+  [(set_attr "type" "nop")]
+)
+
+(define_insn "wfe"
+  [(unspec_volatile [(const_int 0)] UNSPECV_WFE)]
+  ""
+  "wfe"
+  [(set_attr "type" "nop")]
+)
+
+(define_insn "wfi"
+  [(unspec_volatile [(const_int 0)] UNSPECV_WFI)]
+  ""
+  "wfi"
+  [(set_attr "type" "nop")]
+)
+
+(define_insn "sev"
+  [(unspec_volatile [(const_int 0)] UNSPECV_SEV)]
+  ""
+  "sev"
+  [(set_attr "type" "nop")]
+)
+
+(define_insn "sevl"
+  [(unspec_volatile [(const_int 0)] UNSPECV_SEVL)]
+  ""
+  "sevl"
+  [(set_attr "type" "nop")]
+)
+
 (define_insn "prefetch"
   [(prefetch (match_operand:DI 0 "aarch64_prefetch_operand" "Dp")
             (match_operand:QI 1 "const_int_operand" "")
diff --git a/gcc/config/aarch64/arm_acle.h b/gcc/config/aarch64/arm_acle.h
index 534a989c39af1db6ada37a703e8b98300941e094..37ef8d152c4d8e44baa7a798396833c21b817e0f 100644
--- a/gcc/config/aarch64/arm_acle.h
+++ b/gcc/config/aarch64/arm_acle.h
@@ -91,4 +91,34 @@ __crc32d (uint32_t __a, uint64_t __b)
 
 #pragma GCC pop_options
 
+__extension__ static __inline void __attribute__ ((__always_inline__))
+__yield (void)
+{
+  __builtin_aarch64_yield ();
+}
+
+__extension__ static __inline void __attribute__ ((__always_inline__))
+__sev (void)
+{
+  __builtin_aarch64_sev ();
+}
+
+__extension__ static __inline void __attribute__ ((__always_inline__))
+__sevl (void)
+{
+  __builtin_aarch64_sevl ();
+}
+
+__extension__ static __inline void __attribute__ ((__always_inline__))
+__wfi (void)
+{
+  __builtin_aarch64_wfi ();
+}
+
+__extension__ static __inline void __attribute__ ((__always_inline__))
+__wfe (void)
+{
+  __builtin_aarch64_wfe ();
+}
+
 #endif
diff --git a/gcc/testsuite/gcc.target/aarch64/acle/hint-1.c b/gcc/testsuite/gcc.target/aarch64/acle/hint-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..fcddf50c5bc249e1d4972f4a594137d62f39cda0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/acle/hint-1.c
@@ -0,0 +1,52 @@
+/* Test the yield ACLE hint intrinsic */
+/* { dg-do compile } */
+
+#include "arm_acle.h"
+
+void
+test_hint1 (void)
+{
+ __yield ();
+}
+
+/* { dg-final {scan-assembler "yield" } } */
+
+/* Test the yield ACLE hint intrinsic */
+
+void
+test_hint2 (void)
+{
+ __wfe ();
+}
+
+/* { dg-final {scan-assembler "wfe" } } */
+
+/* Test the wfi ACLE hint intrinsic */
+
+void
+test_hint3 (void)
+{
+__wfi ();
+}
+
+/* { dg-final {scan-assembler "wfi" } } */
+
+/* Test the sev ACLE hint intrinsic */
+
+void
+test_hint4 (void)
+{
+__sev ();
+}
+
+/* { dg-final {scan-assembler "sev" } } */
+
+/* Test the sevl ACLE hint intrinsic */
+
+void
+test_hint5 (void)
+{
+__sevl ();
+}
+
+/* { dg-final {scan-assembler "sevl" } } */
