{
  "_meta": {
    "license": {
      "copyright": "Copyright (c) 2010-2026 Arm Limited or its affiliates. All rights reserved.",
      "info": "This document is Non_confidential. This document may only be used and distributed in\naccordance with the terms of the agreement entered into by Arm and the party that\nArm delivered this document to.\n\nThe data contained in this file is preliminary and subject to change or\ncorrection following further review.\n"
    },
    "version": {
      "architecture": "v9Ap6-A",
      "build": "750",
      "ref": "2026-03_rel",
      "schema": "2.8",
      "timestamp": "2026-03-26 20:27:25"
    }
  },
  "_type": "Features",
  "constraints": [
    {
      "_type": "AST.BinaryOp",
      "left": {
        "_type": "AST.Identifier",
        "value": "FEAT_AA64EL1"
      },
      "op": "==>",
      "right": {
        "_type": "AST.UnaryOp",
        "expr": {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Function",
            "arguments": [
              {
                "_type": "Types.Field",
                "value": {
                  "field": "IESB",
                  "instance": null,
                  "name": "ID_AA64MMFR2_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              }
            ],
            "name": "UInt",
            "parameters": []
          },
          "op": ">=",
          "right": {
            "_type": "AST.Integer",
            "value": 2
          }
        },
        "op": "!"
      }
    },
    {
      "_type": "AST.Bool",
      "value": true
    },
    {
      "_type": "AST.BinaryOp",
      "left": {
        "_type": "AST.Identifier",
        "value": "FEAT_AA64EL1"
      },
      "op": "==>",
      "right": {
        "_type": "AST.UnaryOp",
        "expr": {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Function",
            "arguments": [
              {
                "_type": "Types.Field",
                "value": {
                  "field": "S1POE",
                  "instance": null,
                  "name": "ID_AA64MMFR3_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              }
            ],
            "name": "UInt",
            "parameters": []
          },
          "op": ">=",
          "right": {
            "_type": "AST.Integer",
            "value": 2
          }
        },
        "op": "!"
      }
    },
    {
      "_type": "AST.BinaryOp",
      "left": {
        "_type": "AST.Identifier",
        "value": "FEAT_AA64EL1"
      },
      "op": "==>",
      "right": {
        "_type": "AST.UnaryOp",
        "expr": {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Function",
            "arguments": [
              {
                "_type": "Types.Field",
                "value": {
                  "field": "BT",
                  "instance": null,
                  "name": "ID_AA64PFR1_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              }
            ],
            "name": "UInt",
            "parameters": []
          },
          "op": ">=",
          "right": {
            "_type": "AST.Integer",
            "value": 2
          }
        },
        "op": "!"
      }
    },
    {
      "_type": "AST.BinaryOp",
      "left": {
        "_type": "AST.Identifier",
        "value": "FEAT_AA64EL1"
      },
      "op": "==>",
      "right": {
        "_type": "AST.UnaryOp",
        "expr": {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Function",
            "arguments": [
              {
                "_type": "Types.Field",
                "value": {
                  "field": "FHM",
                  "instance": null,
                  "name": "ID_AA64ISAR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              }
            ],
            "name": "UInt",
            "parameters": []
          },
          "op": ">=",
          "right": {
            "_type": "AST.Integer",
            "value": 3
          }
        },
        "op": "!"
      }
    },
    {
      "_type": "AST.BinaryOp",
      "left": {
        "_type": "AST.BinaryOp",
        "left": {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME"
          },
          "op": "||",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE"
          }
        },
        "op": "&&",
        "right": {
          "_type": "AST.Identifier",
          "value": "FEAT_AA64EL1"
        }
      },
      "op": "==>",
      "right": {
        "_type": "AST.UnaryOp",
        "expr": {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Function",
            "arguments": [
              {
                "_type": "Types.Field",
                "value": {
                  "field": "B16B16",
                  "instance": null,
                  "name": "ID_AA64ZFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              }
            ],
            "name": "UInt",
            "parameters": []
          },
          "op": ">=",
          "right": {
            "_type": "AST.Integer",
            "value": 3
          }
        },
        "op": "!"
      }
    },
    {
      "_type": "AST.BinaryOp",
      "left": {
        "_type": "AST.BinaryOp",
        "left": {
          "_type": "AST.Identifier",
          "value": "FEAT_SME"
        },
        "op": "&&",
        "right": {
          "_type": "AST.Identifier",
          "value": "FEAT_AA64EL1"
        }
      },
      "op": "==>",
      "right": {
        "_type": "AST.UnaryOp",
        "expr": {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Function",
            "arguments": [
              {
                "_type": "Types.Field",
                "value": {
                  "field": "SMEver",
                  "instance": null,
                  "name": "ID_AA64SMFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              }
            ],
            "name": "UInt",
            "parameters": []
          },
          "op": ">=",
          "right": {
            "_type": "AST.Integer",
            "value": 4
          }
        },
        "op": "!"
      }
    },
    {
      "_type": "AST.BinaryOp",
      "left": {
        "_type": "AST.BinaryOp",
        "left": {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME"
          },
          "op": "||",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE"
          }
        },
        "op": "&&",
        "right": {
          "_type": "AST.Identifier",
          "value": "FEAT_AA64EL1"
        }
      },
      "op": "==>",
      "right": {
        "_type": "AST.UnaryOp",
        "expr": {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Function",
            "arguments": [
              {
                "_type": "Types.Field",
                "value": {
                  "field": "SVEver",
                  "instance": null,
                  "name": "ID_AA64ZFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              }
            ],
            "name": "UInt",
            "parameters": []
          },
          "op": ">=",
          "right": {
            "_type": "AST.Integer",
            "value": 4
          }
        },
        "op": "!"
      }
    },
    {
      "_type": "AST.BinaryOp",
      "left": {
        "_type": "AST.Identifier",
        "value": "FEAT_AA64EL1"
      },
      "op": "==>",
      "right": {
        "_type": "AST.UnaryOp",
        "expr": {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Function",
            "arguments": [
              {
                "_type": "Types.Field",
                "value": {
                  "field": "MOPS",
                  "instance": null,
                  "name": "ID_AA64ISAR2_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              }
            ],
            "name": "UInt",
            "parameters": []
          },
          "op": ">=",
          "right": {
            "_type": "AST.Integer",
            "value": 2
          }
        },
        "op": "!"
      }
    },
    {
      "_type": "AST.BinaryOp",
      "left": {
        "_type": "AST.Identifier",
        "value": "FEAT_AA64EL1"
      },
      "op": "==>",
      "right": {
        "_type": "AST.UnaryOp",
        "expr": {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Function",
            "arguments": [
              {
                "_type": "Types.Field",
                "value": {
                  "field": "DIT",
                  "instance": null,
                  "name": "ID_AA64PFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              }
            ],
            "name": "UInt",
            "parameters": []
          },
          "op": ">=",
          "right": {
            "_type": "AST.Integer",
            "value": 2
          }
        },
        "op": "!"
      }
    },
    {
      "_type": "AST.BinaryOp",
      "left": {
        "_type": "AST.Identifier",
        "value": "FEAT_AA64EL1"
      },
      "op": "==>",
      "right": {
        "_type": "AST.UnaryOp",
        "expr": {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Function",
            "arguments": [
              {
                "_type": "Types.Field",
                "value": {
                  "field": "SRMASK",
                  "instance": null,
                  "name": "ID_AA64MMFR4_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              }
            ],
            "name": "UInt",
            "parameters": []
          },
          "op": ">=",
          "right": {
            "_type": "AST.Integer",
            "value": 2
          }
        },
        "op": "!"
      }
    },
    {
      "_type": "AST.BinaryOp",
      "left": {
        "_type": "AST.Identifier",
        "value": "FEAT_AA64EL1"
      },
      "op": "==>",
      "right": {
        "_type": "AST.UnaryOp",
        "expr": {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Function",
            "arguments": [
              {
                "_type": "Types.Field",
                "value": {
                  "field": "BBM",
                  "instance": null,
                  "name": "ID_AA64MMFR2_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              }
            ],
            "name": "UInt",
            "parameters": []
          },
          "op": ">=",
          "right": {
            "_type": "AST.Integer",
            "value": 3
          }
        },
        "op": "!"
      }
    },
    {
      "_type": "AST.BinaryOp",
      "left": {
        "_type": "AST.Identifier",
        "value": "FEAT_AA64EL1"
      },
      "op": "==>",
      "right": {
        "_type": "AST.UnaryOp",
        "expr": {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Function",
            "arguments": [
              {
                "_type": "Types.Field",
                "value": {
                  "field": "NV_frac",
                  "instance": null,
                  "name": "ID_AA64MMFR4_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              }
            ],
            "name": "UInt",
            "parameters": []
          },
          "op": ">=",
          "right": {
            "_type": "AST.Integer",
            "value": 3
          }
        },
        "op": "!"
      }
    },
    {
      "_type": "AST.BinaryOp",
      "left": {
        "_type": "AST.Identifier",
        "value": "FEAT_AA64EL1"
      },
      "op": "==>",
      "right": {
        "_type": "AST.UnaryOp",
        "expr": {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Function",
            "arguments": [
              {
                "_type": "Types.Field",
                "value": {
                  "field": "ETS",
                  "instance": null,
                  "name": "ID_AA64MMFR1_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              }
            ],
            "name": "UInt",
            "parameters": []
          },
          "op": ">=",
          "right": {
            "_type": "AST.Integer",
            "value": 4
          }
        },
        "op": "!"
      }
    },
    {
      "_type": "AST.BinaryOp",
      "left": {
        "_type": "AST.BinaryOp",
        "left": {
          "_type": "AST.Identifier",
          "value": "FEAT_AA64EL1"
        },
        "op": "&&",
        "right": {
          "_type": "AST.Identifier",
          "value": "FEAT_AA32EL0"
        }
      },
      "op": "==>",
      "right": {
        "_type": "AST.UnaryOp",
        "expr": {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Function",
            "arguments": [
              {
                "_type": "Types.Field",
                "value": {
                  "field": "ETS",
                  "instance": null,
                  "name": "ID_MMFR5_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              }
            ],
            "name": "UInt",
            "parameters": []
          },
          "op": ">=",
          "right": {
            "_type": "AST.Integer",
            "value": 4
          }
        },
        "op": "!"
      }
    }
  ],
  "parameters": [
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TGran4K"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "v8Ap5"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL2"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_TGran4K"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2TGran4K"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TGran4K"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TGran4",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "SInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 0
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_TGran4K is OPTIONAL from Armv8.0.",
          "In an Armv8.5 implementation, if x[FEAT_AA64EL2](feat:FEAT_AA64EL2) and FEAT_TGran4K are implemented, x[FEAT_S2TGran4K](feat:FEAT_S2TGran4K) is implemented.",
          "The following field identifies the presence of FEAT_TGran4K:",
          " - AArch64-ID_AA64MMFR0_EL1.TGran4.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_TGran4K",
      "title": "Support for 4KB memory translation granule size at stage 1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2TGran4K"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_TGran4K"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_S2TGran4K"
            },
            "op": "==>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "TGran4_2",
                          "instance": null,
                          "name": "ID_AA64MMFR0_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": "==",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 0
                  }
                },
                "op": "&&",
                "right": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_TGran4K"
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "TGran4_2",
                        "instance": null,
                        "name": "ID_AA64MMFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 2
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "v8Ap5"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL1"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "TGran4_2",
                        "instance": null,
                        "name": "ID_AA64MMFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "==",
                "right": {
                  "_type": "AST.Integer",
                  "value": 0
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_TGran4K"
              }
            },
            "op": "==>",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_S2TGran4K"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "v8Ap5"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL1"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TGran4_2",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            },
            "op": "==>",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_S2TGran4K"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_S2TGran4K is OPTIONAL.",
          "If FEAT_S2TGran4K is implemented, then x[FEAT_AA64EL2](feat:FEAT_AA64EL2) and x[FEAT_TGran4K](feat:FEAT_TGran4K) are implemented.",
          "The following field identifies the presence of FEAT_S2TGran4K:",
          " - AArch64-ID_AA64MMFR0_EL1.TGran4_2.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_S2TGran4K",
      "title": "Support for 4KB memory translation granule size at stage 2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TGran16K"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "v8Ap5"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL2"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_TGran16K"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2TGran16K"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TGran16K"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TGran16",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_TGran16K is OPTIONAL from Armv8.0.",
          "In an Armv8.5 implementation, if x[FEAT_AA64EL2](feat:FEAT_AA64EL2) and FEAT_TGran16K are implemented, x[FEAT_S2TGran16K](feat:FEAT_S2TGran16K) is implemented.",
          "The following field identifies the presence of FEAT_TGran16K:",
          " - AArch64-ID_AA64MMFR0_EL1.TGran16.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_TGran16K",
      "title": "Support for 16KB memory translation granule size at stage 1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2TGran16K"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_TGran16K"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_S2TGran16K"
            },
            "op": "==>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "TGran16_2",
                          "instance": null,
                          "name": "ID_AA64MMFR0_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": "==",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 0
                  }
                },
                "op": "&&",
                "right": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_TGran16K"
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "TGran16_2",
                        "instance": null,
                        "name": "ID_AA64MMFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 2
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "v8Ap5"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL1"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "TGran16_2",
                        "instance": null,
                        "name": "ID_AA64MMFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "==",
                "right": {
                  "_type": "AST.Integer",
                  "value": 0
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_TGran16K"
              }
            },
            "op": "==>",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_S2TGran16K"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "v8Ap5"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL1"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TGran16_2",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            },
            "op": "==>",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_S2TGran16K"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_S2TGran16K is OPTIONAL.",
          "If FEAT_S2TGran16K is implemented, then x[FEAT_AA64EL2](feat:FEAT_AA64EL2) and x[FEAT_TGran16K](feat:FEAT_TGran16K) are implemented.",
          "The following field identifies the presence of FEAT_S2TGran16K:",
          " - AArch64-ID_AA64MMFR0_EL1.TGran16_2.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_S2TGran16K",
      "title": "Support for 16KB memory translation granule size at stage 2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TGran64K"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "v8Ap5"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL2"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_TGran64K"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2TGran64K"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TGran64K"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TGran64",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "SInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 0
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_TGran64K is OPTIONAL from Armv8.0.",
          "In an Armv8.5 implementation, if x[FEAT_AA64EL2](feat:FEAT_AA64EL2) and FEAT_TGran64K are implemented, x[FEAT_S2TGran64K](feat:FEAT_S2TGran64K) is implemented.",
          "The following field identifies the presence of FEAT_TGran64K:",
          " - AArch64-ID_AA64MMFR0_EL1.TGran64.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_TGran64K",
      "title": "Support for 64KB memory translation granule size at stage 1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2TGran64K"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_TGran64K"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_S2TGran64K"
            },
            "op": "==>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "TGran64_2",
                          "instance": null,
                          "name": "ID_AA64MMFR0_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": "==",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 0
                  }
                },
                "op": "&&",
                "right": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_TGran64K"
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "TGran64_2",
                        "instance": null,
                        "name": "ID_AA64MMFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 2
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "v8Ap5"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL1"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "TGran64_2",
                        "instance": null,
                        "name": "ID_AA64MMFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "==",
                "right": {
                  "_type": "AST.Integer",
                  "value": 0
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_TGran64K"
              }
            },
            "op": "==>",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_S2TGran64K"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "v8Ap5"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL1"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TGran64_2",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            },
            "op": "==>",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_S2TGran64K"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_S2TGran64K is OPTIONAL.",
          "If FEAT_S2TGran64K is implemented, then x[FEAT_AA64EL2](feat:FEAT_AA64EL2) and x[FEAT_TGran64K](feat:FEAT_TGran64K) are implemented.",
          "The following field identifies the presence of FEAT_S2TGran64K:",
          " - AArch64-ID_AA64MMFR0_EL1.TGran64_2.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_S2TGran64K",
      "title": "Support for 64KB memory translation granule size at stage 2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ASID16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ASID16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ASIDBits",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_ASID16 is OPTIONAL from Armv8.0.",
          "The following field identifies the presence of FEAT_ASID16:",
          " - AArch64-ID_AA64MMFR0_EL1.ASIDBits.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_ASID16",
      "title": "16 bit ASID",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MixedEnd"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MixedEnd"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MixedEndEL0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MixedEnd"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "BigEnd",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_MixedEnd is OPTIONAL from Armv8.0.",
          "If FEAT_MixedEnd is implemented, then x[FEAT_MixedEndEL0](feat:FEAT_MixedEndEL0) is implemented.",
          "The following field identifies the presence of FEAT_MixedEnd:",
          " - AArch64-ID_AA64MMFR0_EL1.BigEnd.",
          "For more information, see:",
          " - x[Mixed-endian support in AArch64](#CHDJFGFE|D_the_aarch64_system_level_memory_model.fm).",
          " - x[Mixed-endian support in AArch32](#BEIIBAIG|G_the_aarch32_system_level_memory_model.fm)."
        ],
        "before": "FEAT_MixedEnd provides support for mixed-endian configuration."
      },
      "name": "FEAT_MixedEnd",
      "title": "Mixed-endian support",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MixedEndEL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MixedEndEL0"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "BigEndEL0",
                        "instance": null,
                        "name": "ID_AA64MMFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 1
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "BigEnd",
                        "instance": null,
                        "name": "ID_AA64MMFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 1
                }
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_MixedEndEL0 is OPTIONAL from Armv8.0.",
          "The following fields identify the presence of FEAT_MixedEndEL0:",
          " - AArch64-ID_AA64MMFR0_EL1.BigEndEL0.",
          " - AArch64-ID_AA64MMFR0_EL1.BigEnd.",
          "For more information, see:",
          " - x[Mixed-endian support in AArch64](#CHDJFGFE|D_the_aarch64_system_level_memory_model.fm).",
          " - x[Mixed-endian support in AArch32](#BEIIBAIG|G_the_aarch32_system_level_memory_model.fm)."
        ],
        "before": "FEAT_MixedEndEL0 provides support for mixed-endian at EL0."
      },
      "name": "FEAT_MixedEndEL0",
      "title": "Mixed-endian support at EL0",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SpecSEI"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RAS"
            },
            "op": "==>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SpecSEI"
              },
              "op": "<=>",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "SpecSEI",
                        "instance": null,
                        "name": "ID_AA64MMFR1_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 1
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RAS"
            },
            "op": "==>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SpecSEI"
              },
              "op": "<=>",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "SpecSEI",
                        "instance": null,
                        "name": "ID_MMFR4_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 1
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RAS"
            },
            "op": "==>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SpecSEI"
              },
              "op": "<=>",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "SpecSEI",
                        "instance": null,
                        "name": "ID_MMFR4",
                        "slices": null,
                        "state": "AArch32"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 1
                }
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_SpecSEI is OPTIONAL from Armv8.0.",
          "The following fields identify the presence of FEAT_SpecSEI:",
          " - AArch64-ID_AA64MMFR1_EL1.SpecSEI.",
          " - AArch64-ID_MMFR4_EL1.SpecSEI.",
          " - AArch32-ID_MMFR4.SpecSEI."
        ],
        "before": "Describes whether the PE can generate SError interrupt exceptions from speculative reads of memory, including speculative instruction fetches."
      },
      "name": "FEAT_SpecSEI",
      "title": "SError interrupt exceptions from speculative reads of memory",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXTPMN"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXTPMN"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXTPMN"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXTPMN"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXTPMN"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HPMN0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXTPMN"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "AST.DotAtom",
                    "values": [
                      {
                        "_type": "AST.Identifier",
                        "value": "PMU"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "PMDEVID"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "EXTPMN"
                      }
                    ]
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_PMUv3_EXTPMN is OPTIONAL from Armv9.5.",
          "If FEAT_PMUv3_EXTPMN is implemented, then x[FEAT_PMUv3](feat:FEAT_PMUv3) is implemented.",
          "If FEAT_PMUv3_EXTPMN is implemented, then x[FEAT_PMUv3_EXT](feat:FEAT_PMUv3_EXT) is implemented.",
          "If FEAT_PMUv3_EXTPMN is implemented, then x[FEAT_FGT](feat:FEAT_FGT) is implemented.",
          "When FEAT_PMUv3_EXTPMN and x[FEAT_EL2](feat:FEAT_EL2) are implemented, x[FEAT_HPMN0](feat:FEAT_HPMN0) is implemented.",
          "The following field identifies the presence of FEAT_PMUv3_EXTPMN:",
          " - PMDEVID.EXTPMN."
        ],
        "before": "FEAT_PMUv3_EXTPMN provides external agents with a mechanism to reserve event counters for external use."
      },
      "name": "FEAT_PMUv3_EXTPMN",
      "title": "Reserving PMU event counters for external agents",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap6"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_CRR"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_EXC"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_nVM"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPEv1p5"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMSVer",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 6
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPEv1p5 is OPTIONAL from Armv9.5.",
          "In an Armv9.6 implementation, if x[FEAT_SPE](feat:FEAT_SPE) is implemented, FEAT_SPEv1p5 is implemented.",
          "If FEAT_SPEv1p5 is implemented, then x[FEAT_SPEv1p4](feat:FEAT_SPEv1p4) is implemented.",
          "If FEAT_SPEv1p5 is implemented, then x[FEAT_SPE_CRR](feat:FEAT_SPE_CRR) is implemented.",
          "If FEAT_SPEv1p5 is implemented, then x[FEAT_SPE_EXC](feat:FEAT_SPE_EXC) is implemented.",
          "If FEAT_SPEv1p5 is implemented, then x[FEAT_SPE_nVM](feat:FEAT_SPE_nVM) is implemented.",
          "The following field identifies the presence of FEAT_SPEv1p5:",
          " - AArch64-ID_AA64DFR0_EL1.PMSVer."
        ],
        "before": [
          "FEAT_SPEv1p5 introduces the following to the Statistical Profiling Extension:",
          " - If EL2 and x[FEAT_FGT](FEAT_FGT|A_armv8_architecture_extensions.fm) are implemented, a fine-grained trap on the <instruction>PSB CSYNC</instruction> instruction.",
          " - The SPE Profiling exception extension, x[FEAT_SPE_EXC](FEAT_SPE_EXC|A_armv8_architecture_extensions.fm).",
          " - The Statistical Profiling physical addressing mode extension, x[FEAT_SPE_nVM](FEAT_SPE_nVM|A_armv8_architecture_extensions.fm)."
        ]
      },
      "name": "FEAT_SPEv1p5",
      "title": "Statistical Profiling Extension version 1.5",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_EXC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_EXC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_EXC"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SPE_EXC",
                      "instance": null,
                      "name": "ID_AA64DFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPE_EXC is OPTIONAL from Armv9.5.",
          "If FEAT_SPE_EXC is implemented, then x[FEAT_SPEv1p5](feat:FEAT_SPEv1p5) is implemented.",
          "The following field identifies the presence of FEAT_SPE_EXC:",
          " - AArch64-ID_AA64DFR2_EL1.SPE_EXC."
        ],
        "before": "FEAT_SPE_EXC provides support for reporting Profiling Buffer management events as SPE Profiling exceptions."
      },
      "name": "FEAT_SPE_EXC",
      "title": "SPE Profiling exception extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_nVM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_nVM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_nVM"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_nVM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SPE_nVM",
                      "instance": null,
                      "name": "ID_AA64DFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPE_nVM is OPTIONAL from Armv9.5.",
          "If FEAT_SPE_nVM is implemented, then x[FEAT_SPE](feat:FEAT_SPE) is implemented.",
          "When FEAT_SPE_nVM and x[FEAT_EL2](feat:FEAT_EL2) are implemented, x[FEAT_FGT2](feat:FEAT_FGT2) is implemented.",
          "The following field identifies the presence of FEAT_SPE_nVM:",
          " - AArch64-ID_AA64DFR2_EL1.SPE_nVM."
        ],
        "before": "FEAT_SPE_nVM provides support for defining the Profiling Buffer using physical addresses or intermediate physical addresses."
      },
      "name": "FEAT_SPE_nVM",
      "title": "Statistical Profiling physical addressing mode extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBEv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap6"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRBE"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBEv1p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBEv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBEv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE_EXC"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRBEv1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TraceBuffer",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRBEv1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "REVISION",
                      "instance": null,
                      "name": "TRBDEVARCH",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_TRBEv1p1 is OPTIONAL from Armv9.5.",
          "In an Armv9.6 implementation, if x[FEAT_TRBE](feat:FEAT_TRBE) is implemented, FEAT_TRBEv1p1 is implemented.",
          "If FEAT_TRBEv1p1 is implemented, then x[FEAT_TRBE](feat:FEAT_TRBE) is implemented.",
          "If FEAT_TRBEv1p1 is implemented, then x[FEAT_TRBE_EXC](feat:FEAT_TRBE_EXC) is implemented.",
          "The following fields identify the presence of FEAT_TRBEv1p1:",
          " - AArch64-ID_AA64DFR0_EL1.TraceBuffer.",
          " - ext-TRBDEVARCH.REVISION."
        ],
        "before": [
          "FEAT_TRBEv1p1 introduces the following to the Trace Buffer Extension:",
          " - If EL2 and x[FEAT_FGT](FEAT_FGT|A_armv8_architecture_extensions.fm) are implemented, a fine-grained trap on the <instruction>TSB CSYNC</instruction> instruction.",
          " - If EL2 is implemented, an EL2 control to override AArch64-TRBLIMITR_EL1.nVM.",
          " - Support for the TRBE Profiling exception extension, x[FEAT_TRBE_EXC](FEAT_TRBE_EXC|A_armv8_architecture_extensions.fm)."
        ]
      },
      "name": "FEAT_TRBEv1p1",
      "title": "Trace Buffer Extension version 1.1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE_EXC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE_EXC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBEv1p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRBE_EXC"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TRBE_EXC",
                      "instance": null,
                      "name": "ID_AA64DFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_TRBE_EXC is OPTIONAL from Armv9.5.",
          "If FEAT_TRBE_EXC is implemented, then x[FEAT_TRBEv1p1](feat:FEAT_TRBEv1p1) is implemented.",
          "The following field identifies the presence of FEAT_TRBE_EXC:",
          " - AArch64-ID_AA64DFR2_EL1.TRBE_EXC."
        ],
        "before": "FEAT_TRBE_EXC provides support for reporting trace buffer management events as TRBE Profiling exceptions."
      },
      "name": "FEAT_TRBE_EXC",
      "title": "Trace Buffer Profiling exception extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap6"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The Armv9.6 architecture extension is an extension to Armv9.5. It adds mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv9.6 compliant if all of the following apply:",
          "- It is Armv9.5 compliant.",
          " - It includes all of the Armv9.6 architectural features that are mandatory.",
          "An Armv9.6 compliant implementation can additionally include:",
          " - Armv9.6 features that are optional."
        ]
      },
      "name": "v9Ap6",
      "title": "The Armv9.6 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_MOP4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_MOP4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME_MOP4"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "SMOP4",
                  "instance": null,
                  "name": "ID_AA64SMFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_SME_MOP4 is OPTIONAL from Armv9.4.",
          "If FEAT_SME_MOP4 is implemented, then x[FEAT_SME2p1](feat:FEAT_SME2p1) is implemented.",
          "The following field identifies the presence of FEAT_SME_MOP4:",
          " - AArch64-ID_AA64SMFR0_EL1.SMOP4.",
          "For more information, see:",
          " - x[Quarter-tile outer product](#SME_quarter-tile_outer_product)."
        ],
        "before": "FEAT_SME_MOP4 introduces the SME Quarter-tile outer product instructions"
      },
      "name": "FEAT_SME_MOP4",
      "title": "Quarter-tile outer product instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_TMOP"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_TMOP"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME_TMOP"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "STMOP",
                  "instance": null,
                  "name": "ID_AA64SMFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_SME_TMOP is OPTIONAL from Armv9.4.",
          "If FEAT_SME_TMOP is implemented, then x[FEAT_SME2p1](feat:FEAT_SME2p1) is implemented.",
          "The following field identifies the presence of FEAT_SME_TMOP:",
          " - AArch64-ID_AA64SMFR0_EL1.STMOP.",
          "For more information, see:",
          " - x[Structured sparsity outer product](#SME_structured_sparsity_outer_product)."
        ],
        "before": "FEAT_SME_TMOP introduces the SME Structured sparsity outer product instructions."
      },
      "name": "FEAT_SME_TMOP",
      "title": "Structured sparsity outer product instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_LUTv2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_LUTv2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME_LUTv2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "LUTv2",
                  "instance": null,
                  "name": "ID_AA64SMFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_SME_LUTv2 is OPTIONAL from Armv9.2.",
          "If FEAT_SME_LUTv2 is implemented, then x[FEAT_SME2](feat:FEAT_SME2) is implemented.",
          "The following field identifies the presence of FEAT_SME_LUTv2:",
          " - AArch64-ID_AA64SMFR0_EL1.LUTv2."
        ],
        "before": [
          "FEAT_SME_LUTv2 introduces the following:",
          " - The [LUTI4 (four registers, 8-bit)](#A64.instructions.luti4_mz4_ztmz2) instruction.",
          " - The [MOVT (vector to table)](#A64.instructions.movt_zt_z) instruction."
        ]
      },
      "name": "FEAT_SME_LUTv2",
      "title": "Lookup table instructions with 4-bit indices and 8-bit elements",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LUT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap5"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AdvSIMD"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LUT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LUT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_AdvSIMD"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE2"
              }
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LUT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LUT",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_LUT is OPTIONAL from Armv9.2.",
          "In an Armv9.5 implementation, if x[FEAT_AdvSIMD](feat:FEAT_AdvSIMD) is implemented, FEAT_LUT is implemented.",
          "If FEAT_LUT is implemented, then x[FEAT_AdvSIMD](feat:FEAT_AdvSIMD), x[FEAT_SVE2](feat:FEAT_SVE2), or x[FEAT_SME2](feat:FEAT_SME2) is implemented.",
          "The following field identifies the presence of FEAT_LUT:",
          " - AArch64-ID_AA64ISAR2_EL1.LUT.",
          "For more information, see:",
          " - For Advanced SIMD, [Lookup table using 2-bit or 4-bit indices](#SIMD_lookup_table_read).",
          " - For SVE, [Lookup table using 2-bit or 4-bit indices](#SVE_lookup_table_read)."
        ],
        "before": [
          "FEAT_LUT introduces the following lookup table instructions with 2-bit and 4-bit indices:",
          " - The Advanced SIMD <instruction>LUTI2</instruction> and <instruction>LUTI4</instruction> instructions.",
          " - If x[FEAT_SVE2](FEAT_SVE2) is implemented, the SVE <instruction>LUTI2</instruction> and <instruction>LUTI4</instruction> instructions when the PE is not in Streaming SVE mode.",
          " - If x[FEAT_SME2](FEAT_SME2) is implemented, the SVE <instruction>LUTI2</instruction> and <instruction>LUTI4</instruction> instructions when the PE is in Streaming SVE mode."
        ]
      },
      "name": "FEAT_LUT",
      "title": "Lookup table instructions with 2-bit and 4-bit indices",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FAMINMAX"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap5"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FAMINMAX"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FAMINMAX"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_AdvSIMD"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE2"
              }
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FAMINMAX"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FAMINMAX",
                      "instance": null,
                      "name": "ID_AA64ISAR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_FAMINMAX is OPTIONAL from Armv9.2.",
          "In an Armv9.5 implementation, if x[FEAT_FP](feat:FEAT_FP) is implemented, FEAT_FAMINMAX is implemented.",
          "If FEAT_FAMINMAX is implemented, then x[FEAT_AdvSIMD](feat:FEAT_AdvSIMD), x[FEAT_SVE2](feat:FEAT_SVE2), or x[FEAT_SME2](feat:FEAT_SME2) is implemented.",
          "The following field identifies the presence of FEAT_FAMINMAX:",
          " - AArch64-ID_AA64ISAR3_EL1.FAMINMAX.",
          "For more information, see:",
          " - [SIMD arithmetic](#CJAJAHBI).",
          " - [Floating-point minimum/maximum absolute value](#SVE2_floatingpoint_minmax_absolute_value).",
          " - [Multi-vector minimum/maximum](#BABGEBEDF6)."
        ],
        "before": "FEAT_FAMINMAX introduces the Advanced SIMD, SVE and SME <instruction>FAMAX</instruction> and <instruction>FAMIN</instruction> instructions that calculate floating-point maximum and minimum absolute value."
      },
      "name": "FEAT_FAMINMAX",
      "title": "Floating-point maximum and minimum absolute value instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FPMR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FPMR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AdvSIMD"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FPMR"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FPMR"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HCX"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FPMR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FPMR",
                      "instance": null,
                      "name": "ID_AA64PFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_FPMR is OPTIONAL from Armv9.2.",
          "If FEAT_FPMR is implemented, then x[FEAT_AdvSIMD](feat:FEAT_AdvSIMD) is implemented.",
          "When FEAT_FPMR and x[FEAT_EL2](feat:FEAT_EL2) are implemented, x[FEAT_FGT](feat:FEAT_FGT) is implemented.",
          "When FEAT_FPMR and x[FEAT_EL2](feat:FEAT_EL2) are implemented, x[FEAT_HCX](feat:FEAT_HCX) is implemented.",
          "The following field identifies the presence of FEAT_FPMR:",
          " - AArch64-ID_AA64PFR2_EL1.FPMR.",
          "For more information, see [Summary of FP8 instruction behaviors](#FP8_instruction_behaviors)."
        ],
        "before": "FEAT_FPMR introduces the Special-purpose register x[FPMR](#AArch64.fpmr)."
      },
      "name": "FEAT_FPMR",
      "title": "Floating-point Mode Register",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FPMR"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FAMINMAX"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LUT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_BF16"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_AdvSIMD"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE2"
              }
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP8"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "F8CVT",
                  "instance": null,
                  "name": "ID_AA64FPFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP8"
            },
            "op": "==>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "F8E4M3",
                  "instance": null,
                  "name": "ID_AA64FPFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP8"
            },
            "op": "==>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "F8E5M2",
                  "instance": null,
                  "name": "ID_AA64FPFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_FP8 is OPTIONAL from Armv9.2.",
          "If FEAT_FP8 is implemented, then x[FEAT_FPMR](feat:FEAT_FPMR) is implemented.",
          "If FEAT_FP8 is implemented, then x[FEAT_FAMINMAX](feat:FEAT_FAMINMAX) is implemented.",
          "If FEAT_FP8 is implemented, then x[FEAT_LUT](feat:FEAT_LUT) is implemented.",
          "If FEAT_FP8 is implemented, then x[FEAT_BF16](feat:FEAT_BF16) is implemented.",
          "If FEAT_FP8 is implemented, then x[FEAT_AdvSIMD](feat:FEAT_AdvSIMD), x[FEAT_SVE2](feat:FEAT_SVE2), or x[FEAT_SME2](feat:FEAT_SME2) is implemented.",
          "The following fields identify the presence of FEAT_FP8:",
          " - AArch64-ID_AA64FPFR0_EL1.F8CVT.",
          " - AArch64-ID_AA64FPFR0_EL1.F8E4M3.",
          " - AArch64-ID_AA64FPFR0_EL1.F8E5M2.",
          "For more information, see:",
          " - [FP8 floating-point formats](#FP8_floatingpoint_formats).",
          " - [Summary of FP8 instruction behaviors](#FP8_instruction_behaviors).",
          " - For Advanced SIMD, [FP8 floating-point conversion](#SIMD_FP8_conversions).",
          " - For SVE, [FP8 floating-point conversions](#SVE_FP8_conversions).",
          " - For SME, [FP8 floating-point conversions](#SME_FP8_conversions).",
          " - The *OCP 8-bit Floating Point Specification (OFP8)*."
        ],
        "before": [
          "FEAT_FP8 introduces the following:",
          [
            " - OFP8 formats E5M2 and E4M3 for FP8 instructions.",
            " - Advanced SIMD: FP8 convert instructions and a floating point scaling <instruction>FSCALE</instruction> instruction.",
            " - SME: FP8 convert instructions and floating point scaling <instruction>FSCALE</instruction> instructions.",
            " - SVE: FP8 convert instructions."
          ]
        ]
      },
      "name": "FEAT_FP8",
      "title": "FP8 convert instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8FMA"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8FMA"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8FMA"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AdvSIMD"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP8FMA"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "F8FMA",
                  "instance": null,
                  "name": "ID_AA64FPFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_FP8FMA is OPTIONAL from Armv9.2.",
          "If FEAT_FP8FMA is implemented, then x[FEAT_FP8](feat:FEAT_FP8) is implemented.",
          "If FEAT_FP8FMA is implemented, then x[FEAT_AdvSIMD](feat:FEAT_AdvSIMD) or x[FEAT_SVE2](feat:FEAT_SVE2) is implemented.",
          "The following field identifies the presence of FEAT_FP8FMA:",
          " - AArch64-ID_AA64FPFR0_EL1.F8FMA.",
          "For more information, see:",
          " - [Summary of FP8 instruction behaviors](#FP8_instruction_behaviors).",
          " - For Advanced SIMD, [FP8 floating-point widening multiply-accumulate](#SIMD_FP8_multiplyaccumulate).",
          " - For SVE, [FP8 floating-point widening multiply-accumulate](#SVE_FP8_multiplyaccumulate)."
        ],
        "before": [
          "FEAT_FP8FMA introduces the following:",
          " - Advanced SIMD: FP8 to half-precision and single-precision multiply-accumulate instructions.",
          " - SVE: FP8 to half-precision and single-precision multiply-accumulate instructions.",
          "[note]This feature does not enable execution of the SVE instructions in Streaming SVE mode.[/note]"
        ]
      },
      "name": "FEAT_FP8FMA",
      "title": "FP8 multiply-accumulate to half-precision and single-precision instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_FP8FMA"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_FP8FMA"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_FP8FMA"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP8FMA"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_FP8FMA"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SSVE_FP8FMA"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "SF8FMA",
                  "instance": null,
                  "name": "ID_AA64SMFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_SSVE_FP8FMA is OPTIONAL from Armv9.2.",
          "If FEAT_SSVE_FP8FMA is implemented, then x[FEAT_FP8](feat:FEAT_FP8) is implemented.",
          "If FEAT_SSVE_FP8FMA is implemented, then x[FEAT_SME2](feat:FEAT_SME2) is implemented.",
          "If x[FEAT_SME2](feat:FEAT_SME2) and x[FEAT_FP8FMA](feat:FEAT_FP8FMA) are implemented, then FEAT_SSVE_FP8FMA is implemented.",
          "The following field identifies the presence of FEAT_SSVE_FP8FMA:",
          " - AArch64-ID_AA64SMFR0_EL1.SF8FMA.",
          "For more information, see:",
          " - [Summary of FP8 instruction behaviors](#FP8_instruction_behaviors).",
          " - [FP8 floating-point widening multiply-accumulate](#SVE_FP8_multiplyaccumulate)."
        ],
        "before": "FEAT_SSVE_FP8FMA enables execution of SVE FP8 to half-precision and single-precision multiply-accumulate instructions in Streaming SVE mode."
      },
      "name": "FEAT_SSVE_FP8FMA",
      "title": "SVE2 FP8 multiply-accumulate to half-precision and single-precision instructions in Streaming SVE mode",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8DOT4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8DOT4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8FMA"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8DOT4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AdvSIMD"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP8DOT4"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "F8DP4",
                  "instance": null,
                  "name": "ID_AA64FPFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_FP8DOT4 is OPTIONAL from Armv9.2.",
          "If FEAT_FP8DOT4 is implemented, then x[FEAT_FP8FMA](feat:FEAT_FP8FMA) is implemented.",
          "If FEAT_FP8DOT4 is implemented, then x[FEAT_AdvSIMD](feat:FEAT_AdvSIMD) or x[FEAT_SVE2](feat:FEAT_SVE2) is implemented.",
          "The following field identifies the presence of FEAT_FP8DOT4:",
          " - AArch64-ID_AA64FPFR0_EL1.F8DP4.",
          "For more information, see:",
          " - [Summary of FP8 instruction behaviors](#FP8_instruction_behaviors).",
          " - For Advanced SIMD, [FP8 floating-point dot product](#SIMD_FP8_dot_product).",
          " - For SVE, [FP8 floating-point dot product](#SVE_FP8_dot_product)."
        ],
        "before": [
          "FEAT_FP8DOT4 introduces the following:",
          " - Advanced SIMD: FP8 to single-precision 4-way dot product instructions.",
          " - SVE: SVE FP8 to single-precision 4-way dot product instructions.",
          "[note]This feature does not enable execution of the SVE instructions in Streaming SVE mode.[/note]"
        ]
      },
      "name": "FEAT_FP8DOT4",
      "title": "FP8 4-way dot product to single-precision instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_FP8DOT4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_FP8DOT4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_FP8FMA"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP8DOT4"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_FP8DOT4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SSVE_FP8DOT4"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "SF8DP4",
                  "instance": null,
                  "name": "ID_AA64SMFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_SSVE_FP8DOT4 is OPTIONAL from Armv9.2.",
          "If FEAT_SSVE_FP8DOT4 is implemented, then x[FEAT_SSVE_FP8FMA](feat:FEAT_SSVE_FP8FMA) is implemented.",
          "If x[FEAT_SME2](feat:FEAT_SME2) and x[FEAT_FP8DOT4](feat:FEAT_FP8DOT4) are implemented, then FEAT_SSVE_FP8DOT4 is implemented.",
          "The following field identifies the presence of FEAT_SSVE_FP8DOT4:",
          " - AArch64-ID_AA64SMFR0_EL1.SF8DP4.",
          "For more information, see:",
          " - [Summary of FP8 instruction behaviors](#FP8_instruction_behaviors).",
          " - [FP8 floating-point dot product](#SVE_FP8_dot_product)."
        ],
        "before": "FEAT_SSVE_FP8DOT4 enables execution of SVE FP8 to single-precision 4-way dot product instructions in Streaming SVE mode."
      },
      "name": "FEAT_SSVE_FP8DOT4",
      "title": "SVE2 FP8 4-way dot product to single-precision instructions in Streaming SVE mode",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8DOT2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8DOT2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8DOT4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8DOT2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AdvSIMD"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP8DOT2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "F8DP2",
                  "instance": null,
                  "name": "ID_AA64FPFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_FP8DOT2 is OPTIONAL from Armv9.2.",
          "If FEAT_FP8DOT2 is implemented, then x[FEAT_FP8DOT4](feat:FEAT_FP8DOT4) is implemented.",
          "If FEAT_FP8DOT2 is implemented, then x[FEAT_AdvSIMD](feat:FEAT_AdvSIMD) or x[FEAT_SVE2](feat:FEAT_SVE2) is implemented.",
          "The following field identifies the presence of FEAT_FP8DOT2:",
          " - AArch64-ID_AA64FPFR0_EL1.F8DP2.",
          "For more information, see:",
          " - [Summary of FP8 instruction behaviors](#FP8_instruction_behaviors).",
          " - For Advanced SIMD, [FP8 floating-point dot product](#SIMD_FP8_dot_product).",
          " - For SVE, [FP8 floating-point dot product](#SVE_FP8_dot_product)."
        ],
        "before": [
          "FEAT_FP8DOT2 introduces the Advanced SIMD FP8 to half-precision 2-way dot product instructions.",
          "If FEAT_SVE2 is implemented, FEAT_FP8DOT2 also implements the SVE versions of these instructions.",
          "[note]This feature does not enable execution of the SVE instructions in Streaming SVE mode.[/note]"
        ]
      },
      "name": "FEAT_FP8DOT2",
      "title": "FP8 2-way dot product to half-precision instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_FP8DOT2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_FP8DOT2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_FP8DOT4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP8DOT2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_FP8DOT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SSVE_FP8DOT2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "SF8DP2",
                  "instance": null,
                  "name": "ID_AA64SMFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_SSVE_FP8DOT2 is OPTIONAL from Armv9.2.",
          "If FEAT_SSVE_FP8DOT2 is implemented, then x[FEAT_SSVE_FP8DOT4](feat:FEAT_SSVE_FP8DOT4) is implemented.",
          "If x[FEAT_SME2](feat:FEAT_SME2) and x[FEAT_FP8DOT2](feat:FEAT_FP8DOT2) are implemented, then FEAT_SSVE_FP8DOT2 is implemented.",
          "The following field identifies the presence of FEAT_SSVE_FP8DOT2:",
          " - AArch64-ID_AA64SMFR0_EL1.SF8DP2.",
          "For more information, see:",
          " - [Summary of FP8 instruction behaviors](#FP8_instruction_behaviors).",
          " - [FP8 floating-point dot product](#SVE_FP8_dot_product)."
        ],
        "before": "FEAT_SSVE_FP8DOT2 enables execution of SVE FP8 to half-precision 2-way dot product instructions in Streaming SVE mode."
      },
      "name": "FEAT_SSVE_FP8DOT2",
      "title": "SVE FP8 2-way dot product to half-precision instructions in Streaming SVE mode",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_F8F16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_F8F16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_F8F32"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME_F8F16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "F8F16",
                  "instance": null,
                  "name": "ID_AA64SMFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_SME_F8F16 is OPTIONAL from Armv9.2.",
          "If FEAT_SME_F8F16 is implemented, then x[FEAT_SME_F8F32](feat:FEAT_SME_F8F32) is implemented.",
          "The following field identifies the presence of FEAT_SME_F8F16:",
          " - AArch64-ID_AA64SMFR0_EL1.F8F16.",
          "For more information, see:",
          " - [Summary of FP8 instruction behaviors](#FP8_instruction_behaviors).",
          " - [FP8 floating-point widening multiply-accumulate](#SME_FP8_multiplyaccumulate).",
          " - [FP8 floating-point dot product](#SME_FP8_dot_product).",
          " - [FP8 floating-point outer product](#SME_FP8_outer_product)."
        ],
        "before": [
          "FEAT_SME_F8F16 introduces the following SME instructions:",
          [
            " - ZA-targeting FP8 to half-precision multiply-accumulate, dot product, and outer product instructions.",
            " - ZA-targeting multi-vector non-widening half-precision [FADD](#A64.instructions.fadd_za_zw) and [FSUB](#A64.instructions.fsub_za_zw) instructions."
          ]
        ]
      },
      "name": "FEAT_SME_F8F16",
      "title": "SME2 ZA-targeting FP8 multiply-accumulate, dot product, and outer product to half-precision instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_F8F32"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_F8F32"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_F8F32"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME_F8F32"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "F8F32",
                  "instance": null,
                  "name": "ID_AA64SMFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_SME_F8F32 is OPTIONAL from Armv9.2.",
          "If FEAT_SME_F8F32 is implemented, then x[FEAT_SME2](feat:FEAT_SME2) is implemented.",
          "If FEAT_SME_F8F32 is implemented, then x[FEAT_FP8](feat:FEAT_FP8) is implemented.",
          "The following field identifies the presence of FEAT_SME_F8F32:",
          " - AArch64-ID_AA64SMFR0_EL1.F8F32.",
          "For more information, see:",
          " - [Summary of FP8 instruction behaviors](#FP8_instruction_behaviors).",
          " - [FP8 floating-point widening multiply-accumulate](#SME_FP8_multiplyaccumulate).",
          " - [FP8 floating-point dot product](#SME_FP8_dot_product).",
          " - [FP8 floating-point outer product](#SME_FP8_outer_product)."
        ],
        "before": "FEAT_SME_F8F32 introduces the SME ZA-targeting FP8 to single-precision multiply-accumulate, dot product, and outer product instructions."
      },
      "name": "FEAT_SME_F8F32",
      "title": "SME2 ZA-targeting FP8 multiply-accumulate, dot product, and outer product to single-precision instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CPA"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_CPA"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CPA"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CPA",
                      "instance": null,
                      "name": "ID_AA64ISAR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_CPA is OPTIONAL from Armv9.4.",
          "FEAT_CPA is mandatory from Armv9.5.",
          "The following field identifies the presence of FEAT_CPA:",
          " - AArch64-ID_AA64ISAR3_EL1.CPA.",
          "For more information, see [Checked Pointer Arithmetic](#MDSec.Checked_Pointer_Arithmetic)."
        ],
        "before": "FEAT_CPA introduces support for Checked Pointer Arithmetic instructions."
      },
      "name": "FEAT_CPA",
      "title": "Instruction-only Checked Pointer Arithmetic",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CPA2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CPA2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_CPA"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CPA2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SCTLR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CPA2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CPA",
                      "instance": null,
                      "name": "ID_AA64ISAR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_CPA2 is OPTIONAL from Armv9.4.",
          "If FEAT_CPA2 is implemented, then x[FEAT_CPA](feat:FEAT_CPA) is implemented.",
          "If FEAT_CPA2 is implemented, then x[FEAT_SCTLR2](feat:FEAT_SCTLR2) is implemented.",
          "The following field identifies the presence of FEAT_CPA2:",
          " - AArch64-ID_AA64ISAR3_EL1.CPA.",
          "For more information, see [Checked Pointer Arithmetic](#MDSec.Checked_Pointer_Arithmetic)."
        ],
        "before": [
          "FEAT_CPA2 introduces support for enabling Checked Pointer Arithmetic. Checked Pointer Arithmetic detects and reports corruption of the following:",
          " - The top 8 bits of a pointer.",
          " - Multiplication overflows that lead to invalid array indices being calculated."
        ]
      },
      "name": "FEAT_CPA2",
      "title": "Checked Pointer Arithmetic",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The Armv9.5 architecture extension is an extension to Armv9.4. It adds mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv9.5 compliant if all of the following apply:",
          "- It is Armv9.4 compliant.",
          " - It includes all of the Armv9.5 architectural features that are mandatory.",
          "An Armv9.5 compliant implementation can additionally include:",
          " - Armv9.5 features that are optional.",
          "- Any arbitrary subset of the architectural features of Armv9.6, subject only to those constraints that require that certain features be implemented together."
        ]
      },
      "name": "v9Ap5",
      "title": "The Armv9.5 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_STEP2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_STEP2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_STEP2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_STEP2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "STEP",
                      "instance": null,
                      "name": "ID_AA64DFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_STEP2 is OPTIONAL from Armv9.4.",
          "FEAT_STEP2 is mandatory from Armv9.5.",
          "When FEAT_STEP2 and x[FEAT_EL2](feat:FEAT_EL2) are implemented, x[FEAT_FGT2](feat:FEAT_FGT2) is implemented.",
          "The following field identifies the presence of FEAT_STEP2:",
          " - AArch64-ID_AA64DFR2_EL1.STEP.",
          "For more information, see x[Behavior in the active-not-pending state](#CJAEAFJC)."
        ],
        "before": "FEAT_STEP2 introduces support for a debugger to control the instruction executed by the PE when single-stepping, without modifying the instruction in memory."
      },
      "name": "FEAT_STEP2",
      "title": "Enhanced Software Step Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_BWE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_BWE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "BWE",
                      "instance": null,
                      "name": "ID_AA64DFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ABLE",
                      "instance": null,
                      "name": "ID_AA64DFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            },
            "op": "==>",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_BWE"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "ABLE",
                    "instance": null,
                    "name": "EDDFR1",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 1
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_BWE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_BWE"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "BWE",
                    "instance": null,
                    "name": "EDDFR2",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 1
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_BWE is OPTIONAL from Armv9.3.",
          "The following fields identify the presence of FEAT_BWE:",
          " - AArch64-ID_AA64DFR2_EL1.BWE.",
          " - AArch64-ID_AA64DFR1_EL1.ABLE.",
          " - ext-EDDFR1.ABLE.",
          " - ext-EDDFR2.BWE.",
          "For more information, see x[Other usage constraints for Address breakpoints](#BCGGFGAH|D_aarch64_self_hosted_debug.fm)."
        ],
        "before": "FEAT_BWE introduces the capability to define an included-range-based breakpoint and an excluded-range-based breakpoint."
      },
      "name": "FEAT_BWE",
      "title": "Breakpoint and watchpoint enhancements",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_BWE2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap5"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_BWE"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_BWE2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_BWE2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_BWE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_BWE2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "BWE",
                      "instance": null,
                      "name": "ID_AA64DFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_BWE2"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "BWE",
                    "instance": null,
                    "name": "EDDFR2",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 2
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_BWE2 is OPTIONAL from Armv9.4.",
          "In an Armv9.5 implementation, if x[FEAT_BWE](feat:FEAT_BWE) is implemented, FEAT_BWE2 is implemented.",
          "If FEAT_BWE2 is implemented, then x[FEAT_BWE](feat:FEAT_BWE) is implemented.",
          "The following fields identify the presence of FEAT_BWE2:",
          " - AArch64-ID_AA64DFR2_EL1.BWE.",
          " - ext-EDDFR2.BWE.",
          "For more information, see:",
          " - x[About Watchpoint exceptions](#BCGJJIJB).",
          " - x[Exception syndrome information, fault address information, and preferred return address](#BCGCFDCG).",
          " - x[Watchpoint data address comparisons](#BCGFGHFF)."
        ],
        "before": "FEAT_BWE2 provides the capability to generate a Watchpoint exception or debug event when software accesses an address outside of one or more user-supplied address regions."
      },
      "name": "FEAT_BWE2",
      "title": "Breakpoint and watchpoint enhancements 2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_FPF"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap5"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_FPF"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_FPF"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_FPF"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_EFT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_FPF"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FPF",
                      "instance": null,
                      "name": "PMSIDR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPE_FPF is OPTIONAL from Armv9.4.",
          "In an Armv9.5 implementation, if x[FEAT_SPE](feat:FEAT_SPE) is implemented, FEAT_SPE_FPF is implemented.",
          "If FEAT_SPE_FPF is implemented, then x[FEAT_SPE](feat:FEAT_SPE) is implemented.",
          "If FEAT_SPE_FPF is implemented, then x[FEAT_SPE_EFT](feat:FEAT_SPE_EFT) is implemented.",
          "The following field identifies the presence of FEAT_SPE_FPF:",
          " - AArch64-PMSIDR_EL1.FPF.",
          "For more information, see x[Additional information for other operations](#CACGIDEE)."
        ],
        "before": "FEAT_SPE_FPF extends the profiling information recorded by the Statistical Profiling Extension to identify sampled scalar floating-point and Advanced SIMD instructions."
      },
      "name": "FEAT_SPE_FPF",
      "title": "Statistical Profiling floating-point and SIMD flag extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_EFT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap5"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_EFT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_EFT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_EFT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_FPF"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_EFT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "EFT",
                      "instance": null,
                      "name": "PMSIDR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPE_EFT is OPTIONAL from Armv9.4.",
          "In an Armv9.5 implementation, if x[FEAT_SPE](feat:FEAT_SPE) is implemented, FEAT_SPE_EFT is implemented.",
          "If FEAT_SPE_EFT is implemented, then x[FEAT_SPE](feat:FEAT_SPE) is implemented.",
          "If FEAT_SPE_EFT is implemented, then x[FEAT_SPE_FPF](feat:FEAT_SPE_FPF) is implemented.",
          "The following field identifies the presence of FEAT_SPE_EFT:",
          " - AArch64-PMSIDR_EL1.EFT.",
          "For more information, see x[Filtering by operation type](#filtering_by_operation_type)."
        ],
        "before": "FEAT_SPE_EFT extends SPE filtering to support targeted profiling of floating-point and SIMD operations."
      },
      "name": "FEAT_SPE_EFT",
      "title": "Statistical Profiling extended filtering by type",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_TH2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_TH2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_TH"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_TH2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EDGE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_TH2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "EDGE",
                      "instance": null,
                      "name": "PMMIR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_TH2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "AST.DotAtom",
                    "values": [
                      {
                        "_type": "AST.Identifier",
                        "value": "PMU"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "PMMIR"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "EDGE"
                      }
                    ]
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states. The [threshold condition](#MDTerm.pmu_th_condition) controls are accessible only in AArch64 state. However, [threshold condition](#MDTerm.pmu_th_condition)s still apply in AArch32 state.",
          "FEAT_PMUv3_TH2 is OPTIONAL from Armv9.4.",
          "If FEAT_PMUv3_TH2 is implemented, then x[FEAT_PMUv3_TH](feat:FEAT_PMUv3_TH) is implemented.",
          "If FEAT_PMUv3_TH2 is implemented, then x[FEAT_PMUv3_EDGE](feat:FEAT_PMUv3_EDGE) is implemented.",
          "The following fields identify the presence of FEAT_PMUv3_TH2:",
          " - AArch64-PMMIR_EL1.EDGE.",
          " - PMMIR.EDGE.",
          "For more information, see [Event threshold and edge counting](#CACBGFJEG4)."
        ],
        "before": "FEAT_PMUv3_TH2 extends the Performance Monitors Extension to add the ability to program an event counter to count the logical combination of two events."
      },
      "name": "FEAT_PMUv3_TH2",
      "title": "Performance Monitors event counter linking extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPMU2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap5"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPMU"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPMU2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPMU2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPMU"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPMU2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SPMU",
                      "instance": null,
                      "name": "ID_AA64DFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_SPMU2 is OPTIONAL from Armv9.4.",
          "In an Armv9.5 implementation, if x[FEAT_SPMU](feat:FEAT_SPMU) is implemented, FEAT_SPMU2 is implemented.",
          "If FEAT_SPMU2 is implemented, then x[FEAT_SPMU](feat:FEAT_SPMU) is implemented.",
          "The following field identifies the presence of FEAT_SPMU2:",
          " - AArch64-ID_AA64DFR1_EL1.SPMU.",
          "For more information, see [Zeroing System PMU counters](#Zeroing_System_PMU_counters)."
        ],
        "before": "FEAT_SPMU2 provides the functionality to set multiple event counters in a System PMU to zero in a single operation."
      },
      "name": "FEAT_SPMU2",
      "title": "System Performance Monitors Extension version 2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_E3DSE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap5"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_E3DSE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_E3DSE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "E3DSE",
                      "instance": null,
                      "name": "ID_AA64MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_E3DSE is OPTIONAL from Armv9.4.",
          "In an Armv9.5 implementation, if x[FEAT_AA64EL3](feat:FEAT_AA64EL3) is implemented, FEAT_E3DSE is implemented.",
          "The following field identifies the presence of FEAT_E3DSE:",
          " - AArch64-ID_AA64MMFR4_EL1.E3DSE.",
          "For more information, see [Asynchronous exception types](#BEICCADH)."
        ],
        "before": "FEAT_E3DSE provides an SError injection mechanism for EL3 called delegated SErrors."
      },
      "name": "FEAT_E3DSE",
      "title": "Delegated SError exception injection",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PoPS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PoPS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PoPS",
                      "instance": null,
                      "name": "ID_AA64MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_PoPS is OPTIONAL from Armv9.5.",
          "The following field identifies the presence of FEAT_PoPS:",
          " - AArch64-ID_AA64MMFR4_EL1.PoPS.",
          "For more information, see [Terminology for Clean, Invalidate, and Clean and Invalidate instructions](#CBHBEGGC)."
        ],
        "before": "FEAT_PoPS defines the Point of Physical Storage (PoPS) and introduces System instructions to clean and invalidate to the PoPS."
      },
      "name": "FEAT_PoPS",
      "title": "Point of Physical Storage",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_SME"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "v9Ap5"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_PMUv3"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_SME"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_SME"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_SME"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_SME"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SME",
                      "instance": null,
                      "name": "PMMIR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_PMUv3_SME is OPTIONAL from Armv9.4.",
          "In an Armv9.5 implementation, if x[FEAT_PMUv3](feat:FEAT_PMUv3) and x[FEAT_SME](feat:FEAT_SME) are implemented, FEAT_PMUv3_SME is implemented.",
          "If FEAT_PMUv3_SME is implemented, then x[FEAT_PMUv3](feat:FEAT_PMUv3) is implemented.",
          "If FEAT_PMUv3_SME is implemented, then x[FEAT_SME](feat:FEAT_SME) is implemented.",
          "The following field identifies the presence of FEAT_PMUv3_SME:",
          " - AArch64-PMMIR_EL1.SME.",
          "For more information, see [Filtering by SVE Streaming mode](#Filtering_by_SVE_Streaming_mode)."
        ],
        "before": "FEAT_PMUv3_SME supports filtering to control counting events in Streaming and Non-streaming SVE modes."
      },
      "name": "FEAT_PMUv3_SME",
      "title": "Performance Monitors extensions for SME",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_SME"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "v9Ap5"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SPEv1p1"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_SME"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_SME"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_SME"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_SME"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SME",
                      "instance": null,
                      "name": "PMSIDR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPE_SME is OPTIONAL from Armv9.2.",
          "In an Armv9.5 implementation, if x[FEAT_SPEv1p1](feat:FEAT_SPEv1p1) and x[FEAT_SME](feat:FEAT_SME) are implemented, FEAT_SPE_SME is implemented.",
          "If FEAT_SPE_SME is implemented, then x[FEAT_SPEv1p1](feat:FEAT_SPEv1p1) is implemented.",
          "If FEAT_SPE_SME is implemented, then x[FEAT_SME](feat:FEAT_SME) is implemented.",
          "The following field identifies the presence of FEAT_SPE_SME:",
          " - AArch64-PMSIDR_EL1.SME.",
          "For more information, see x[Additional information for each profiled SVE and SME operation](#CACFBFID)."
        ],
        "before": "FEAT_SPE_SME provides support for profiling of software that uses SME instructions using the Statistical Profiling Extension."
      },
      "name": "FEAT_SPE_SME",
      "title": "Statistical Profiling extensions for SME",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_ALTCLK"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_ALTCLK"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_ALTCLK"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ALTCLK",
                      "instance": null,
                      "name": "PMSIDR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPE_ALTCLK is OPTIONAL from Armv9.4.",
          "If FEAT_SPE_ALTCLK is implemented, then x[FEAT_SPE](feat:FEAT_SPE) is implemented.",
          "The following field identifies the presence of FEAT_SPE_ALTCLK:",
          " - AArch64-PMSIDR_EL1.ALTCLK.",
          "For more information, see x[Asynchronous operation](#asynchronous_operation)."
        ],
        "before": "FEAT_SPE_ALTCLK supports collection of timing data using the Statistical Profiling Extension when profiling a PE that includes asynchronous accelerators, such as a x[Streaming Mode Compute Unit](#CHDIAGFEG1) (SMCU)."
      },
      "name": "FEAT_SPE_ALTCLK",
      "title": "Statistical Profiling alternate clock domain extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap3"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "v8Ap9"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The Armv9.4 architecture extension is an extension to Armv9.3. It adds mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv9.4 compliant if all of the following apply:",
          "- It is Armv8.9 compliant.",
          "- It is Armv9.3 compliant.",
          " - It includes all of the Armv9.4 architectural features that are mandatory.",
          "An Armv9.4 compliant implementation can additionally include:",
          " - Armv9.4 features that are optional.",
          "- Any arbitrary subset of the architectural features of Armv9.5, subject only to those constraints that require that certain features be implemented together."
        ]
      },
      "name": "v9Ap4",
      "title": "The Armv9.4 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HDBSS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HDBSS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HAFDBS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HDBSS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_HDBSS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "HAFDBS",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 4
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_HDBSS is OPTIONAL from Armv9.4.",
          "If FEAT_HDBSS is implemented, then x[FEAT_HAFDBS](feat:FEAT_HAFDBS) is implemented.",
          "If FEAT_HDBSS is implemented, then x[FEAT_AA64EL2](feat:FEAT_AA64EL2) is implemented.",
          "The following field identifies the presence of FEAT_HDBSS:",
          " - AArch64-ID_AA64MMFR1_EL1.HAFDBS.",
          "For more information, see [Hardware dirty state tracking structure](#Hardware_dirty_state_tracking_structure)."
        ],
        "before": "FEAT_HDBSS introduces the Hardware Dirty state tracking structure, which enhances tracking the dirty state of stage 2 translation table descriptors."
      },
      "name": "FEAT_HDBSS",
      "title": "Hardware Dirty state tracking structure",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_E2H0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_E2H0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_VHE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_E2H0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_VHE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_E2H0"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "E2H0",
                      "instance": null,
                      "name": "ID_AA64MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "SInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 0
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_E2H0 is OPTIONAL from Armv8.0.",
          "If FEAT_E2H0 is implemented, then x[FEAT_VHE](feat:FEAT_VHE) is implemented.",
          "If FEAT_E2H0 is implemented, then x[FEAT_AA64EL2](feat:FEAT_AA64EL2) is implemented.",
          "The following field identifies the presence of FEAT_E2H0:",
          " - AArch64-ID_AA64MMFR4_EL1.E2H0."
        ],
        "before": "When FEAT_VHE is implemented, FEAT_E2H0 indicates that x[HCR_EL2](#AArch64.hcr_el2|D_aarch64_system_register_descriptions.fm).E2H can be programmed to the value 0. The absence of FEAT_E2H0 results in a relaxed behavior where HCR_EL2.E2H is RES1, with EL2 host mode always enabled."
      },
      "name": "FEAT_E2H0",
      "title": "Programming of HCR_EL2.E2H",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HACDBS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HACDBS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HDBSS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_HACDBS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "HACDBS",
                      "instance": null,
                      "name": "ID_AA64MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_HACDBS is OPTIONAL from Armv9.4.",
          "If FEAT_HACDBS is implemented, then x[FEAT_HDBSS](feat:FEAT_HDBSS) is implemented.",
          "The following field identifies the presence of FEAT_HACDBS:",
          " - AArch64-ID_AA64MMFR4_EL1.HACDBS.",
          "For more information, see [Hardware accelerator for cleaning dirty state](#Hardware_accelerator_for_cleaning_dirty_state)."
        ],
        "before": "FEAT_HACDBS introduces the Hardware accelerator for cleaning Dirty state, which enhances the process of updating stage 2 descriptors from writable-dirty to writable-clean."
      },
      "name": "FEAT_HACDBS",
      "title": "Hardware accelerator for cleaning Dirty state",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TLBIW"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TLBIW"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TLBIW"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TLBIW",
                      "instance": null,
                      "name": "ID_AA64ISAR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_TLBIW is OPTIONAL from Armv9.4.",
          "If FEAT_TLBIW is implemented, then x[FEAT_AA64EL2](feat:FEAT_AA64EL2) is implemented.",
          "The following field identifies the presence of FEAT_TLBIW:",
          " - AArch64-ID_AA64ISAR3_EL1.TLBIW."
        ],
        "before": [
          "FEAT_TLBIW provides the following TLBI instructions that remove the stage 2 dirty state from TLB entries:",
          " - x[TLBI VMALLWS2E1, TLBI VMALLWS2E1NXS](#AArch64.tlbi_vmallws2e1).",
          " - x[TLBI VMALLWS2E1IS, TLBI VMALLWS2E1ISNXS](#AArch64.tlbi_vmallws2e1is).",
          " - x[TLBI VMALLWS2E1OS, TLBI VMALLWS2E1OSNXS](#AArch64.tlbi_vmallws2e1os)."
        ]
      },
      "name": "FEAT_TLBIW",
      "title": "TLBI VMALL for Dirty state",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ASID2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ASID2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ASID2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TCR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ASID2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ASID2",
                      "instance": null,
                      "name": "ID_AA64MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_ASID2 is OPTIONAL from Armv9.4.",
          "FEAT_ASID2 is mandatory from Armv9.5.",
          "If FEAT_ASID2 is implemented, then x[FEAT_TCR2](feat:FEAT_TCR2) is implemented.",
          "The following field identifies the presence of FEAT_ASID2:",
          " - AArch64-ID_AA64MMFR4_EL1.ASID2.",
          "For more information, see [Use of ASIDs and VMIDs to reduce TLB maintenance requirements](#MDSec.Use_of_ASIDs_and_VMIDs_to_reduce_TLB_maintenance_requirements)."
        ],
        "before": "FEAT_ASID2 introduces support for use of one ASID for each x[TTBR_ELx](#BABJCEAGI5|appx_registers_index.fm)."
      },
      "name": "FEAT_ASID2",
      "title": "Support for concurrent use of two ASIDs",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ADERR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ADERR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SCTLR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ADERR"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HCX"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ADERR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ADERR",
                      "instance": null,
                      "name": "ID_AA64MMFR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ADERR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SDERR",
                      "instance": null,
                      "name": "ID_AA64MMFR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_ADERR is OPTIONAL from Armv8.8.",
          "If FEAT_ADERR is implemented, then x[FEAT_SCTLR2](feat:FEAT_SCTLR2) is implemented.",
          "When FEAT_ADERR and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_HCX](feat:FEAT_HCX) is implemented.",
          "The following fields identify the presence of FEAT_ADERR:",
          " - AArch64-ID_AA64MMFR3_EL1.ADERR.",
          " - AArch64-ID_AA64MMFR3_EL1.SDERR.",
          "For more information, see:",
          " - x[About the RAS Extension](#MDSec.about_ras|D_ras_pe_architecture.fm).",
          " - x[Taking error exceptions](#MDSec.taking_error_exceptions|D_ras_pe_architecture.fm)."
        ],
        "before": "FEAT_ADERR introduces controls for whether an error signaled on a load from Device memory is handled precisely and synchronously."
      },
      "name": "FEAT_ADERR",
      "title": "Asynchronous Device Error Exceptions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ANERR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ANERR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SCTLR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ANERR"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HCX"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ANERR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ANERR",
                      "instance": null,
                      "name": "ID_AA64MMFR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ANERR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SNERR",
                      "instance": null,
                      "name": "ID_AA64MMFR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_ANERR is OPTIONAL from Armv8.8.",
          "If FEAT_ANERR is implemented, then x[FEAT_SCTLR2](feat:FEAT_SCTLR2) is implemented.",
          "When FEAT_ANERR and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_HCX](feat:FEAT_HCX) is implemented.",
          "The following fields identify the presence of FEAT_ANERR:",
          " - AArch64-ID_AA64MMFR3_EL1.ANERR.",
          " - AArch64-ID_AA64MMFR3_EL1.SNERR.",
          "For more information, see:",
          " - x[About the RAS Extension](#MDSec.about_ras|D_ras_pe_architecture.fm).",
          " - x[Taking error exceptions](#MDSec.taking_error_exceptions|D_ras_pe_architecture.fm)."
        ],
        "before": "FEAT_ANERR introduces controls for whether an error signaled on a load from Normal memory is handled precisely and synchronously."
      },
      "name": "FEAT_ANERR",
      "title": "Asynchronous Normal Error Exceptions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_DoubleFault2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_DoubleFault2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SCTLR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_DoubleFault2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_DoubleFault2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HCX"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_DoubleFault2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_DoubleFault"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_DoubleFault2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DF2",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_DoubleFault2 is OPTIONAL from Armv8.8.",
          "If FEAT_DoubleFault2 is implemented, then x[FEAT_SCTLR2](feat:FEAT_SCTLR2) is implemented.",
          "When x[FEAT_AA64](feat:FEAT_AA64) and FEAT_DoubleFault2 are implemented, x[FEAT_AA64EL1](feat:FEAT_AA64EL1) is implemented.",
          "When FEAT_DoubleFault2 and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_HCX](feat:FEAT_HCX) is implemented.",
          "If FEAT_DoubleFault2 is implemented, then x[FEAT_DoubleFault](feat:FEAT_DoubleFault) is implemented.",
          "The following field identifies the presence of FEAT_DoubleFault2:",
          " - AArch64-ID_AA64PFR1_EL1.DF2.",
          "For more information, see:",
          " - x[Synchronous exception types](#BEIBCFCC|D_the_aarch64_system_level_programmers_model.fm).",
          " - x[Asynchronous exception types](#BEICCADH|D_the_aarch64_system_level_programmers_model.fm).",
          " - x[Error synchronization event](#MDSec.error_synchronization_event|D_ras_pe_architecture.fm)."
        ],
        "before": "FEAT_DoubleFault2 provides additional controls for routing and masking error exceptions."
      },
      "name": "FEAT_DoubleFault2",
      "title": "Double Fault Extension v2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PFAR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PFAR"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PFAR"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PFAR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PFAR",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_PFAR is OPTIONAL from Armv8.8.",
          "When x[FEAT_AA64](feat:FEAT_AA64) and FEAT_PFAR are implemented, x[FEAT_AA64EL1](feat:FEAT_AA64EL1) is implemented.",
          "When FEAT_PFAR and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_FGT2](feat:FEAT_FGT2) is implemented.",
          "The following field identifies the presence of FEAT_PFAR:",
          " - AArch64-ID_AA64PFR1_EL1.PFAR."
        ],
        "before": "FEAT_PFAR introduces the Physical Fault Address Registers, x[PFAR_ELx](#PFAR_ELx|appx_registers_index.fm), that record the faulting physical address for a synchronous External abort or SError exception."
      },
      "name": "FEAT_PFAR",
      "title": "Physical Fault Address Register Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RASv2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap9"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_RAS"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_RASv2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RASv2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RASv2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_RASv1p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RASv2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_RASSAv2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RASv2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RAS",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RASv2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RAS",
                      "instance": null,
                      "name": "ID_PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RASv2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RAS",
                      "instance": null,
                      "name": "ID_PFR0",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_RASv2 is OPTIONAL from Armv8.8.",
          "In an Armv8.9 implementation, if x[FEAT_RAS](feat:FEAT_RAS) is implemented, FEAT_RASv2 is implemented.",
          "When FEAT_RASv2 and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_FGT2](feat:FEAT_FGT2) is implemented.",
          "If FEAT_RASv2 is implemented, then x[FEAT_RASv1p1](feat:FEAT_RASv1p1) is implemented.",
          "If FEAT_RASv2 is implemented, then FEAT_RASSAv2 is implemented.",
          "The following fields identify the presence of FEAT_RASv2:",
          " - AArch64-ID_AA64PFR0_EL1.RAS.",
          " - AArch64-ID_PFR0_EL1.RAS.",
          " - AArch32-ID_PFR0.RAS.",
          "For more information, see:",
          " - x[RAS PE architecture](#RAS_pe_architecture|D_ras_pe_architecture.fm).",
          " - *Arm^®^ Reliability Availability and Serviceability (RAS) System Architecture, for A-profile architecture* (ARM IHI 0100)."
        ],
        "before": [
          "FEAT_RASv2 introduces the following to the Reliability, Availability, and Serviceability Extension:",
          " - The features defined by FEAT_RASSAv2 in the System register error records.",
          " - The error group status register, x[ERXGSR_EL1](#AArch64.erxgsr_el1).",
          " - A control to trap writes to RAS error record System registers to EL3.",
          " - An additional syndrome to x[ESR_ELx](ESR_ELx|appx_registers_index.fm) for error exceptions."
        ]
      },
      "name": "FEAT_RASv2",
      "title": "RAS Extension v2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSSC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap9"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSSC"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CSSC"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CSSC",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_CSSC is OPTIONAL from Armv8.7.",
          "FEAT_CSSC is mandatory from Armv8.9.",
          "The following field identifies the presence of FEAT_CSSC:",
          " - AArch64-ID_AA64ISAR2_EL1.CSSC.",
          "For more information, see:",
          " - x[Integer minimum and maximum (immediate)](#BABDEFAAI8|C_a64_instruction_set_overview.fm).",
          " - x[Integer maximum and minimum (register)](#BABFJIEIC4|C_a64_instruction_set_overview.fm).",
          " - x[Absolute value](#BABGGHIGH0|C_a64_instruction_set_overview.fm).",
          " - x[Bit operation](#CHDBCFBA|C_a64_instruction_set_overview.fm)."
        ],
        "before": "FEAT_CSSC introduces a set of instructions for optimization of short instruction sequences using general-purpose registers."
      },
      "name": "FEAT_CSSC",
      "title": "Common Short Sequence Compression instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RPRFM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RPRFM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RPRFM",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_RPRFM is OPTIONAL from Armv8.0.",
          "The following field identifies the presence of FEAT_RPRFM:",
          " - AArch64-ID_AA64ISAR2_EL1.RPRFM."
        ],
        "before": "FEAT_RPRFM introduces the Range Prefetch Memory hint instruction, x[RPRFM](A64.instructions.RPRFM_reg|C_a64_base_instruction_descriptions.fm) which specifies the range of addresses that are likely to be accessed in the near future and their expected reuse."
      },
      "name": "FEAT_RPRFM",
      "title": "Support for Range Prefetch Memory instruction",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PRFMSLC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PRFMSLC"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PRFMSLC",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_PRFMSLC is OPTIONAL from Armv8.0.",
          "The following field identifies the presence of FEAT_PRFMSLC:",
          " - AArch64-ID_AA64ISAR2_EL1.PRFMSLC."
        ],
        "before": "FEAT_PRFMSLC introduces a system level cache option for the PRFM and PRFUM instructions."
      },
      "name": "FEAT_PRFMSLC",
      "title": "SLC target support for PRFM and PRFUM instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPECRES2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap9"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPECRES2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPECRES2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SPECRES",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPECRES2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SPECRES",
                      "instance": null,
                      "name": "ID_ISAR6_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPECRES2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SPECRES",
                      "instance": null,
                      "name": "ID_ISAR6",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_SPECRES2 is OPTIONAL from Armv8.0.",
          "FEAT_SPECRES2 is mandatory from Armv8.9.",
          "The following fields identify the presence of FEAT_SPECRES2:",
          " - AArch64-ID_AA64ISAR1_EL1.SPECRES.",
          " - AArch64-ID_ISAR6_EL1.SPECRES.",
          " - AArch32-ID_ISAR6.SPECRES.",
          "For more information, see:",
          " - x[Prediction restriction instructions](#CIHJAHDA|C_the_a64_system_instruction_class.fm).",
          " - x[Execution, data prediction and prefetching restriction System instructions](#CHDFEIFG|D_the_aarch64_system_level_memory_model.fm).",
          " - x[Execution and data prediction restriction System instructions](#CHDEADIG|G_the_aarch32_system_level_memory_model.fm)."
        ],
        "before": "FEAT_SPECRES2 introduces a speculation restriction instruction, Clear Other Speculative Prediction Restriction by Context (COSP), to the instructions that are part of x[FEAT_SPECRES](FEAT_SPECRES|A_armv8_architecture_extensions.fm)."
      },
      "name": "FEAT_SPECRES2",
      "title": "Enhanced speculation restriction instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CLRBHB"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap9"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_CLRBHB"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CLRBHB"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CLRBHB",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CLRBHB"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CLRBHB",
                      "instance": null,
                      "name": "ID_ISAR6_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CLRBHB"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CLRBHB",
                      "instance": null,
                      "name": "ID_ISAR6",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_CLRBHB is OPTIONAL from Armv8.0.",
          "FEAT_CLRBHB is mandatory from Armv8.9.",
          "The following fields identify the presence of FEAT_CLRBHB:",
          " - AArch64-ID_AA64ISAR2_EL1.CLRBHB.",
          " - AArch64-ID_ISAR6_EL1.CLRBHB.",
          " - AArch32-ID_ISAR6.CLRBHB.",
          "For more information, see:",
          " - x[Branch prediction](#CHDFFJAA|D_the_aarch64_system_level_memory_model.fm).",
          " - x[AArch32 cache and branch predictor maintenance instructions](#BEIFFHBD|G_the_aarch32_system_level_memory_model.fm)."
        ],
        "before": "FEAT_CLRBHB provides a CLRBHB instruction, which can be used to clear the branch history."
      },
      "name": "FEAT_CLRBHB",
      "title": "Support for Clear Branch History instruction",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ECBHB"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap9"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ECBHB"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ECBHB"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ECBHB",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_ECBHB is OPTIONAL from Armv8.0.",
          "FEAT_ECBHB is mandatory from Armv8.9.",
          "The following field identifies the presence of FEAT_ECBHB:",
          " - AArch64-ID_AA64MMFR1_EL1.ECBHB.",
          "For more information, see x[Branch prediction](#CHDFFJAA|D_the_aarch64_system_level_memory_model.fm)."
        ],
        "before": "FEAT_ECBHB imposes restrictions on branch history speculation around exceptions."
      },
      "name": "FEAT_ECBHB",
      "title": "Exploitative control using branch history information",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SMEver",
                      "instance": null,
                      "name": "ID_AA64SMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SME",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "Types.Field",
              "value": {
                "field": "BI32I32",
                "instance": null,
                "name": "ID_AA64SMFR0_EL1",
                "slices": null,
                "state": "AArch64"
              }
            },
            "op": "==",
            "right": {
              "_type": "Values.Value",
              "meaning": null,
              "value": "'1'"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "I16I32",
                    "instance": null,
                    "name": "ID_AA64SMFR0_EL1",
                    "slices": null,
                    "state": "AArch64"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 1
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SME2 is OPTIONAL from Armv9.2.",
          "If FEAT_SME2 is implemented, then x[FEAT_SME](feat:FEAT_SME) is implemented.",
          "The following fields identify the presence of FEAT_SME2:",
          " - AArch64-ID_AA64SMFR0_EL1.SMEver.",
          " - AArch64-ID_AA64PFR1_EL1.SME.",
          " - AArch64-ID_AA64SMFR0_EL1.BI32I32.",
          " - AArch64-ID_AA64SMFR0_EL1.I16I32.",
          "For more information, see x[The Scalable Matrix Extension](#CACHGCHBG5|D_the_scalable_matrix_extension.fm)."
        ],
        "before": [
          "FEAT_SME2 is a superset of x[FEAT_SME](FEAT_SME|A_armv8_architecture_extensions.fm) that introduces the following:",
          " - The ability to treat the SME ZA array as containing addressable groups of one-dimensional ZA array vectors, instead of two-dimensional ZA tiles.",
          " - Multi-vector instructions that operate on groups of Z vector registers and ZA array vectors.",
          " - A multi-vector predication mechanism for multi-vector load and store.",
          " - A dedicated 512-bit lookup table register, ZT0, for data decompression."
        ]
      },
      "name": "FEAT_SME2",
      "title": "Scalable Matrix Extensions version 2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap4"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2p1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SMEver",
                      "instance": null,
                      "name": "ID_AA64SMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SME2p1 is OPTIONAL from Armv9.2.",
          "In an Armv9.4 implementation, if x[FEAT_SME2](feat:FEAT_SME2) is implemented, FEAT_SME2p1 is implemented.",
          "If FEAT_SME2p1 is implemented, then x[FEAT_SME2](feat:FEAT_SME2) is implemented.",
          "If x[FEAT_SME](feat:FEAT_SME) and x[FEAT_SVE2p1](feat:FEAT_SVE2p1) are implemented, then FEAT_SME2p1 is implemented.",
          "The following field identifies the presence of FEAT_SME2p1:",
          " - AArch64-ID_AA64SMFR0_EL1.SMEver.",
          "For more information, see:",
          " - x[Data processing - SME, SME2](#BABJGDAED2|C_a64_instruction_set_overview.fm).",
          " - x[The Scalable Matrix Extension](#CACHGCHBG5|D_the_scalable_matrix_extension.fm)."
        ],
        "before": [
          "The Scalable Matrix Extension version 2.1 (SME2.1) is a superset of SME2 that adds:",
          " - Support for SVE RAX1 instructions in Streaming SVE mode if FEAT_SVE_SHA3 is implemented.",
          " - SME MOVAZ instructions that move and zero ZA array vectors or ZA tile slices.",
          " - SME ZERO instructions that zero ZA array vectors.",
          " - SME LUTI2 and LUTI4 lookup table instructions to Z vectors with strided numbering.",
          "In this Manual, unless stated otherwise, when SME is used, the behavior also applies to SME2.1."
        ]
      },
      "name": "FEAT_SME2p1",
      "title": "Scalable Matrix Extension version 2.1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_MOP4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_TMOP"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_FEXPA"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2p2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2p2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2p2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SMEver",
                      "instance": null,
                      "name": "ID_AA64SMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SME2p2 is OPTIONAL from Armv9.5.",
          "If FEAT_SME2p2 is implemented, then x[FEAT_SME2p1](feat:FEAT_SME2p1) is implemented.",
          "If FEAT_SME2p2 is implemented, then x[FEAT_SME_MOP4](feat:FEAT_SME_MOP4) is implemented.",
          "If FEAT_SME2p2 is implemented, then x[FEAT_SME_TMOP](feat:FEAT_SME_TMOP) is implemented.",
          "If FEAT_SME2p2 is implemented, then x[FEAT_SSVE_FEXPA](feat:FEAT_SSVE_FEXPA) is implemented.",
          "If x[FEAT_SME](feat:FEAT_SME) and x[FEAT_SVE2p2](feat:FEAT_SVE2p2) are implemented, then FEAT_SME2p2 is implemented.",
          "The following field identifies the presence of FEAT_SME2p2:",
          " - AArch64-ID_AA64SMFR0_EL1.SMEver.",
          "For more information, see:",
          " - x[The Scalable Matrix Extension](#CACHGCHBG5|D_the_scalable_matrix_extension.fm).",
          " - x[Multi-vector multiply](#Multivector_multiply).",
          " - x[Quarter-tile outer product](#SME_quarter-tile_outer_product).",
          " - x[Structured sparsity outer product](#SME_structured_sparsity_outer_product)."
        ],
        "before": [
          "The Scalable Matrix Extension version 2.2 (SME2.2) is a superset of SME2.1 that adds:",
          " - SME multi-vector Z-targeting non-widening floating-point FMUL instruction.",
          " - Quarter-tile outer product instructions.",
          " - Structured sparsity outer product instructions.",
          " - Support for SVE2.2 instructions in Streaming SVE mode."
        ]
      },
      "name": "FEAT_SME2p2",
      "title": "Scalable Matrix Extension version 2.2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CMPBR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap6"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_CMPBR"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CMPBR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CSSC",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_CMPBR is OPTIONAL from Armv9.5.",
          "FEAT_CMPBR is mandatory from Armv9.6.",
          "The following field identifies the presence of FEAT_CMPBR:",
          " - AArch64-ID_AA64ISAR2_EL1.CSSC.",
          "For more information, see:",
          " - x[Conditional branch](#CHDIJFDI).",
          " - x[Concurrent modification and execution of instructions](#CHDHAJID)."
        ],
        "before": "FEAT_CMPBR introduces the A64 base compare and branch instructions."
      },
      "name": "FEAT_CMPBR",
      "title": "Compare and Branch instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_F16F16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_F16F16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME_F16F16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "F16F16",
                  "instance": null,
                  "name": "ID_AA64SMFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SME_F16F16 is OPTIONAL from Armv9.2.",
          "If FEAT_SME_F16F16 is implemented, then x[FEAT_SME2](feat:FEAT_SME2) is implemented.",
          "The following field identifies the presence of FEAT_SME_F16F16:",
          " - AArch64-ID_AA64SMFR0_EL1.F16F16.",
          "For more information, see:",
          " - x[Data processing - SME, SME2](#BABJGDAED2|C_a64_instruction_set_overview.fm).",
          " - x[The Scalable Matrix Extension](#CACHGCHBG5|D_the_scalable_matrix_extension.fm)."
        ],
        "before": "FEAT_SME_F16F16 introduces the SME2 half-precision to single-precision convert instructions and non-widening half-precision floating-point instructions."
      },
      "name": "FEAT_SME_F16F16",
      "title": "Non-widening half-precision FP16 to FP16 arithmetic for SME2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_B16B16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_B16B16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap6"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_B16B16"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_BFSCALE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_B16B16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "B16B16",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SVE_B16B16 is OPTIONAL from Armv9.2.",
          "If FEAT_SVE_B16B16 is implemented, then x[FEAT_SME2](feat:FEAT_SME2) or x[FEAT_SVE2](feat:FEAT_SVE2) is implemented.",
          "In an Armv9.6 implementation, if FEAT_SVE_B16B16 is implemented, x[FEAT_SVE_BFSCALE](feat:FEAT_SVE_BFSCALE) is implemented.",
          "The following field identifies the presence of FEAT_SVE_B16B16:",
          " - AArch64-ID_AA64ZFR0_EL1.B16B16.",
          "For more information, see:",
          " - x[BFloat16 arithmetic](#BABBIAGDI7|C_a64_instruction_set_overview.fm).",
          " - x[BFloat16 minimum/maximum](#BABFCHFEJ4|C_a64_instruction_set_overview.fm).",
          " - x[Clamp to minimum/maximum](#BABBCGJDG1|C_a64_instruction_set_overview.fm)."
        ],
        "before": [
          "FEAT_SVE_B16B16 introduces the following:",
          " - If x[FEAT_SVE2](FEAT_SVE2) is implemented, the SVE non-widening BFloat16 instructions when the PE is not in Streaming SVE mode.",
          " - If x[FEAT_SME2](FEAT_SME2) is implemented, the SVE non-widening BFloat16 instructions when the PE is in Streaming SVE mode, and the SME Z-targeting multi-vector non-widening BFloat16 instructions."
        ]
      },
      "name": "FEAT_SVE_B16B16",
      "title": "Non-widening BFloat16 to BFloat16 arithmetic for SVE2 and SME2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_B16B16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_B16B16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_B16B16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_B16B16"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME_B16B16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "B16B16",
                  "instance": null,
                  "name": "ID_AA64SMFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SME_B16B16 is OPTIONAL from Armv9.2.",
          "If FEAT_SME_B16B16 is implemented, then x[FEAT_SME2](feat:FEAT_SME2) is implemented.",
          "If FEAT_SME_B16B16 is implemented, then x[FEAT_SVE_B16B16](feat:FEAT_SVE_B16B16) is implemented.",
          "The following field identifies the presence of FEAT_SME_B16B16:",
          " - AArch64-ID_AA64SMFR0_EL1.B16B16."
        ],
        "before": "FEAT_SME_B16B16 introduces SME ZA-targeting non-widening BFloat16 floating-point instructions to SME."
      },
      "name": "FEAT_SME_B16B16",
      "title": "Non-widening BFloat16 to BFloat16 SME ZA-targeting arithmetic",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_AES"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_AES"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SSVE_AES"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "AES",
                  "instance": null,
                  "name": "ID_AA64SMFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SSVE_AES is OPTIONAL from Armv9.5.",
          "If FEAT_SSVE_AES is implemented, then x[FEAT_SME2p1](feat:FEAT_SME2p1) is implemented.",
          "The following field identifies the presence of FEAT_SSVE_AES:",
          " - AArch64-ID_AA64SMFR0_EL1.AES.",
          "For more information, see:",
          " - x[AES-128 instructions](#SVE_AES128_instructions).",
          " - x[Polynomial arithmetic](#BABEAGIIG1)."
        ],
        "before": "FEAT_SSVE_AES implements the SVE AES and 128-bit polynomial multiply long instructions, identified as implemented by AArch64-ID_AA64ZFR0_EL1.AES field, when the PE is in Streaming SVE mode."
      },
      "name": "FEAT_SSVE_AES",
      "title": "Streaming SVE Mode Advanced Encryption Standard and 128-bit polynomial multiply long instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "v8Ap8"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The Armv9.3 architecture extension is an extension to Armv9.2. It adds mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv9.3 compliant if all of the following apply:",
          "- It is Armv8.8 compliant.",
          "- It is Armv9.2 compliant.",
          " - It includes all of the Armv9.3 architectural features that are mandatory.",
          "An Armv9.3 compliant implementation can additionally include:",
          " - Armv9.3 features that are optional.",
          "- Any arbitrary subset of the architectural features of Armv9.4, subject only to those constraints that require that certain features be implemented together."
        ]
      },
      "name": "v9Ap3",
      "title": "The Armv9.3 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap9"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The Armv8.9 architecture extension is an extension to Armv8.8. It adds mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv8.9 compliant if all of the following apply:",
          "- It is Armv8.8 compliant.",
          " - It includes all of the Armv8.9 architectural features that are mandatory.",
          "An Armv8.9 compliant implementation can additionally include:",
          " - Armv8.9 features that are optional."
        ]
      },
      "name": "v8Ap9",
      "title": "The Armv8.9 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap9"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FGT2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FGT",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64, and when EL1 is using AArch64, EL0 accesses using AArch32 are also trapped.",
          "FEAT_FGT2 is OPTIONAL from Armv8.8.",
          "In an Armv8.9 implementation, if x[FEAT_AA64EL2](feat:FEAT_AA64EL2) is implemented, FEAT_FGT2 is implemented.",
          "If FEAT_FGT2 is implemented, then x[FEAT_FGT](feat:FEAT_FGT) is implemented.",
          "The following field identifies the presence of FEAT_FGT2:",
          " - AArch64-ID_AA64MMFR0_EL1.FGT."
        ],
        "before": "FEAT_FGT2 introduces the hypervisor registers x[HFGITR2_EL2](#AArch64.hfgitr2_el2|D_aarch64_system_register_descriptions.fm), x[HFGRTR2_EL2](#AArch64.hfgrtr2_el2|D_aarch64_system_register_descriptions.fm), x[HFGWTR_EL2](#AArch64.hfgwtr_el2|D_aarch64_system_register_descriptions.fm), x[HDFGRTR2_EL2](#AArch64.hdfgrtr2_el2|D_aarch64_system_register_descriptions.fm), and x[HDFGWTR2_EL2](#AArch64.hdfgwtr2_el2|D_aarch64_system_register_descriptions.fm). These registers are extensions of the corresponding FGT registers."
      },
      "name": "FEAT_FGT2",
      "title": "Fine-grained traps 2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap9"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTE2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE_PERM"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_MTE_CANONICAL_TAGS"
                },
                "op": "&&",
                "right": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_MTE_NO_ADDRESS_TAGS"
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_MTE_TAGGED_FAR"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTE_STORE_ONLY"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MTE4 is OPTIONAL from Armv8.7.",
          "In an Armv8.9 implementation, if x[FEAT_MTE2](feat:FEAT_MTE2) is implemented, FEAT_MTE4 is implemented.",
          "If FEAT_MTE4 is implemented, then x[FEAT_MTE2](feat:FEAT_MTE2) is implemented.",
          "If FEAT_MTE4 is implemented, then x[FEAT_MTE_PERM](feat:FEAT_MTE_PERM) is implemented.",
          "If FEAT_MTE4 is implemented, then x[FEAT_MTE_CANONICAL_TAGS](feat:FEAT_MTE_CANONICAL_TAGS), x[FEAT_MTE_NO_ADDRESS_TAGS](feat:FEAT_MTE_NO_ADDRESS_TAGS), x[FEAT_MTE_TAGGED_FAR](feat:FEAT_MTE_TAGGED_FAR), and x[FEAT_MTE_STORE_ONLY](feat:FEAT_MTE_STORE_ONLY) are implemented."
        ],
        "before": [
          "FEAT_MTE4 introduces support for the following sub-features:",
          " - Canonical tag checking, identified as x[FEAT_MTE_CANONICAL_TAGS](FEAT_MTE_CANONICAL_TAGS|A_armv8_architecture_extensions.fm).",
          " - Reporting of all non-address bits on a fault, identified as x[FEAT_MTE_TAGGED_FAR](FEAT_MTE_TAGGED_FAR|A_armv8_architecture_extensions.fm).",
          " - Store-only Tag checking, identified as x[FEAT_MTE_STORE_ONLY](FEAT_MTE_STORE_ONLY|A_armv8_architecture_extensions.fm).",
          " - Memory tagging with Address tagging disabled, identified as x[FEAT_MTE_NO_ADDRESS_TAGS](FEAT_MTE_NO_ADDRESS_TAGS|A_armv8_architecture_extensions.fm)."
        ]
      },
      "name": "FEAT_MTE4",
      "title": "Enhanced Memory Tagging Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE_CANONICAL_TAGS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTE_CANONICAL_TAGS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MTEX",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MTE_CANONICAL_TAGS is OPTIONAL.",
          "If FEAT_MTE_CANONICAL_TAGS is implemented, then x[FEAT_MTE4](feat:FEAT_MTE4) is implemented.",
          "The following field identifies the presence of FEAT_MTE_CANONICAL_TAGS:",
          " - AArch64-ID_AA64PFR1_EL1.MTEX."
        ],
        "before": "FEAT_MTE_CANONICAL_TAGS introduces support for MTE canonical tag checking."
      },
      "name": "FEAT_MTE_CANONICAL_TAGS",
      "title": "Canonical Tag checking for Untagged memory",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE_NO_ADDRESS_TAGS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTE_NO_ADDRESS_TAGS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MTEX",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MTE_NO_ADDRESS_TAGS is OPTIONAL.",
          "If FEAT_MTE_NO_ADDRESS_TAGS is implemented, then x[FEAT_MTE4](feat:FEAT_MTE4) is implemented.",
          "The following field identifies the presence of FEAT_MTE_NO_ADDRESS_TAGS:",
          " - AArch64-ID_AA64PFR1_EL1.MTEX."
        ],
        "before": "FEAT_MTE_NO_ADDRESS_TAG introduces support for MTE tagging with Address tagging disabled."
      },
      "name": "FEAT_MTE_NO_ADDRESS_TAGS",
      "title": "Memory tagging with Address tagging disabled",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE_TAGGED_FAR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTE_TAGGED_FAR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MTEFAR",
                      "instance": null,
                      "name": "ID_AA64PFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MTE_TAGGED_FAR is OPTIONAL.",
          "If FEAT_MTE_TAGGED_FAR is implemented, then x[FEAT_MTE4](feat:FEAT_MTE4) is implemented.",
          "The following field identifies the presence of FEAT_MTE_TAGGED_FAR:",
          " - AArch64-ID_AA64PFR2_EL1.MTEFAR."
        ],
        "before": "FEAT_MTE_TAGGED_FAR introduces support for reporting all non-address bits on a synchronous MTE tag check fault."
      },
      "name": "FEAT_MTE_TAGGED_FAR",
      "title": "FAR_ELx on a Tag Check Fault",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE_PERM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap9"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTE2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE_PERM"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE_PERM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTE_PERM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MTEPERM",
                      "instance": null,
                      "name": "ID_AA64PFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MTE_PERM is OPTIONAL from Armv8.7.",
          "In an Armv8.9 implementation, if x[FEAT_MTE2](feat:FEAT_MTE2) is implemented, FEAT_MTE_PERM is implemented.",
          "If FEAT_MTE_PERM is implemented, then x[FEAT_MTE2](feat:FEAT_MTE2) is implemented.",
          "The following field identifies the presence of FEAT_MTE_PERM:",
          " - AArch64-ID_AA64PFR2_EL1.MTEPERM."
        ],
        "before": "FEAT_MTE_PERM introduces support for the Stage 2 NoTagAccess memory attribute."
      },
      "name": "FEAT_MTE_PERM",
      "title": "Allocation tag access permission",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE_STORE_ONLY"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTE_STORE_ONLY"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MTESTOREONLY",
                      "instance": null,
                      "name": "ID_AA64PFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MTE_STORE_ONLY is OPTIONAL.",
          "If FEAT_MTE_STORE_ONLY is implemented, then x[FEAT_MTE4](feat:FEAT_MTE4) is implemented.",
          "The following field identifies the presence of FEAT_MTE_STORE_ONLY:",
          " - AArch64-ID_AA64PFR2_EL1.MTESTOREONLY."
        ],
        "before": null
      },
      "name": "FEAT_MTE_STORE_ONLY",
      "title": "Store-only Tag Checking",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MEC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MEC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MEC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SCTLR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MEC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TCR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MEC"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MEC",
                      "instance": null,
                      "name": "ID_AA64MMFR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MEC is OPTIONAL from Armv9.2.",
          "If FEAT_MEC is implemented, then x[FEAT_RME](feat:FEAT_RME) is implemented.",
          "If FEAT_MEC is implemented, then x[FEAT_SCTLR2](feat:FEAT_SCTLR2) is implemented.",
          "If FEAT_MEC is implemented, then x[FEAT_TCR2](feat:FEAT_TCR2) is implemented.",
          "The following field identifies the presence of FEAT_MEC:",
          " - AArch64-ID_AA64MMFR3_EL1.MEC."
        ],
        "before": [
          "<i>Memory Encryption Contexts</i> (MEC) is an extension to the RME.",
          "An existing RME enabled system uses a combination of isolation and external memory protection to guarantee privacy of the Realm Security state. Isolation between Realms is enforced by the Realm stage 2 translation tables.",
          "FEAT_MEC introduces all of the following features:",
          " - Memory encryption contexts are provided to all physical address spaces.",
          " - Multiple memory encryption contexts are provided to the Realm physical address space for assignment to Realm virtual machines, with policy controlled by Realm EL2.",
          " - The Non-secure, Secure, and Root, physical address spaces each have one encryption context."
        ]
      },
      "name": "FEAT_MEC",
      "title": "Memory Encryption Contexts",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ITE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ITE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRF"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ITE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ITE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ITE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ITE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ITE",
                      "instance": null,
                      "name": "ID_AA64DFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL1"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_ETE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRC_SR"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ITE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ITE",
                      "instance": null,
                      "name": "TRCIDR0",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRC_EXT"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ITE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ITE",
                      "instance": null,
                      "name": "TRCIDR0",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_ITE is OPTIONAL from Armv9.3.",
          "If FEAT_ITE is implemented, then x[FEAT_TRF](feat:FEAT_TRF) is implemented.",
          "If FEAT_ITE is implemented, then x[FEAT_ETE](feat:FEAT_ETE) is implemented.",
          "If FEAT_ITE is implemented, then x[FEAT_TRBE](feat:FEAT_TRBE) is implemented.",
          "When FEAT_ITE and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_FGT2](feat:FEAT_FGT2) is implemented.",
          "The following fields identify the presence of FEAT_ITE:",
          " - AArch64-ID_AA64DFR1_EL1.ITE.",
          " - AArch64-TRCIDR0.ITE.",
          " - ext-TRCIDR0.ITE.",
          "For more information, see:",
          " - x[Instrumentation extension](#MDSec.Instrumentation_extension|D_the_embedded_trace_extension.fm).",
          " - x[Instrumentation element](#CACCHDHFI4|D_the_embedded_trace_extension.fm)."
        ],
        "before": [
          "FEAT_ITE provides all of the following to allow software to inject instrumentation information into the ETE trace stream:",
          " - The x[TRCIT](#AArch64.trcit|C_the_a64_system_instruction_class.fm) instruction, that injects the value of a general purpose register into the ETE trace stream.",
          " - x[Instrumentation Packet](#ETEPacket.Instrumentation-Packet|D_ete_protocol_description.fm) that contains the value written by the TRCIT instruction.",
          " - Controls that define the behavior of the TRCIT instruction."
        ]
      },
      "name": "FEAT_ITE",
      "title": "Instrumentation Trace Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRBE_EXT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ExtTrcBuff",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE_EXT"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "ExtTrcBuff",
                    "instance": null,
                    "name": "EDDFR",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 1
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "TraceBuffer",
                    "instance": null,
                    "name": "EDDFR",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 1
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_TRBE_EXT is OPTIONAL from Armv9.3.",
          "If FEAT_TRBE_EXT is implemented, then x[FEAT_TRBE](feat:FEAT_TRBE) is implemented.",
          "The following fields identify the presence of FEAT_TRBE_EXT:",
          " - AArch64-ID_AA64DFR0_EL1.ExtTrcBuff.",
          " - ext-EDDFR.ExtTrcBuff.",
          " - ext-EDDFR.TraceBuffer.",
          "For more information, see x[Trace buffer External mode](#CHDCEGGHI1|D_the_trace_buffer_extension.fm)."
        ],
        "before": [
          "FEAT_TRBE_EXT allows an external debugger, as well as a self-hosted debugger, to use the Trace Buffer Unit. All of the following registers are introduced to determine the parameters of the implementation:",
          " - x[TRBDEVARCH](#ext.trbdevarch|H_external_debug_register_descriptions.fm).",
          " - x[TRBDEVID](#ext.trbdevid|H_external_debug_register_descriptions.fm).",
          " - x[TRBDEVID1](#ext.trbdevid1|H_external_debug_register_descriptions.fm)."
        ]
      },
      "name": "FEAT_TRBE_EXT",
      "title": "Trace Buffer external mode",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE_MPAM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE_MPAM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE_EXT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE_MPAM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAM"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRBE_MPAM"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_TRBE_MPAM"
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_MPAMv0p1"
                },
                "op": "||",
                "right": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_MPAMv1p0"
                }
              }
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MPAM",
                      "instance": null,
                      "name": "TRBIDR_EL1",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_TRBE_MPAM"
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_MPAMv0p1"
                },
                "op": "||",
                "right": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_MPAMv1p0"
                }
              }
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MPAM",
                      "instance": null,
                      "name": "TRBIDR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_TRBE_MPAM is OPTIONAL from Armv9.3.",
          "If FEAT_TRBE_MPAM is implemented, then x[FEAT_TRBE_EXT](feat:FEAT_TRBE_EXT) is implemented.",
          "If FEAT_TRBE_MPAM is implemented, then x[FEAT_MPAM](feat:FEAT_MPAM) is implemented.",
          "When FEAT_TRBE_MPAM and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_FGT2](feat:FEAT_FGT2) is implemented.",
          "The following fields identify the presence of FEAT_TRBE_MPAM:",
          " - ext-TRBIDR_EL1.MPAM.",
          " - AArch64-TRBIDR_EL1.MPAM.",
          "For more information, see x[External mode and FEAT_MPAM](#trbe_mpam|H_the_external_trace_buffer_debug_component.fm)."
        ],
        "before": "FEAT_TRBE_MPAM allows software to program the MPAM PARTID and PMG to use different MPAM values for trace data. x[TRBDEVID1](#ext.trbdevid1|H_external_debug_register_descriptions.fm).{PMG_MAX, PARTID_MAX} are used to determine the parameters of the MPAM implementation."
      },
      "name": "FEAT_TRBE_MPAM",
      "title": "Trace Buffer MPAM extensions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETEv1p3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETEv1p3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETEv1p2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRC_SR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETEv1p3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "REVISION",
                      "instance": null,
                      "name": "TRCDEVARCH",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRC_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETEv1p3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "REVISION",
                      "instance": null,
                      "name": "TRCDEVARCH",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state, and performs trace in both AArch64 and AArch32 states.",
          "FEAT_ETEv1p3 is OPTIONAL from Armv9.3.",
          "If FEAT_ETEv1p3 is implemented, then x[FEAT_ETEv1p2](feat:FEAT_ETEv1p2) is implemented.",
          "The following fields identify the presence of FEAT_ETEv1p3:",
          " - AArch64-TRCDEVARCH.REVISION.",
          " - ext-TRCDEVARCH.REVISION.",
          "For more information, see x[The Embedded Trace Extension](#ete_specification|D_the_embedded_trace_extension.fm)."
        ],
        "before": [
          "FEAT_ETEv1p3 extends FEAT_ETE to support all of the following:",
          " - The ETE External Debug Request, when FEAT_Debugv8p9 is implemented.",
          " - The ETE Trace Output Enable, which is mandatory for FEAT_ETEv1p3 and OPTIONAL for FEAT_ETE."
        ]
      },
      "name": "FEAT_ETEv1p3",
      "title": "Embedded Trace Extension version 1.3",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_GCS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_GCS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_CHK"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_GCS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_S1PIE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_GCS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "GCS",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_GCS is OPTIONAL from Armv9.3.",
          "If FEAT_GCS is implemented, then x[FEAT_CHK](feat:FEAT_CHK) is implemented.",
          "If FEAT_GCS is implemented, then x[FEAT_S1PIE](feat:FEAT_S1PIE) is implemented.",
          "The following field identifies the presence of FEAT_GCS:",
          " - AArch64-ID_AA64PFR1_EL1.GCS.",
          "For more information, see x[Guarded Control Stack](#MDSec.gcs|D_guarded_control_stack.fm)."
        ],
        "before": "FEAT_GCS introduces support for a Guarded Control Stack, an area of memory in which procedure return addresses and exception return addresses are stored and protected from modification."
      },
      "name": "FEAT_GCS",
      "title": "Guarded Control Stack Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CHK"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_CHK"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_CHK is OPTIONAL from Armv8.0.",
          "FEAT_CHK is mandatory from Armv9.4.",
          "For more information, see x[Detecting when FEAT_GCS is enabled](#MDSec.gcs_detect|D_guarded_control_stack.fm)."
        ],
        "before": [
          "FEAT_CHK introduces the x[CHKFEAT](#A64.instructions.CHKFEAT|C_a64_base_instruction_descriptions.fm) instruction, which allows software to detect when certain features are enabled.",
          "A PE that is compliant with architectures from Armv8.0 to Armv9.3 is compliant with the behavior defined for this feature."
        ]
      },
      "name": "FEAT_CHK",
      "title": "Check Feature Status",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_DPFZS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p9"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPEv1p4"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_DPFZS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_DPFZS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p7"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPEv1p2"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_DPFZS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DPFZS",
                      "instance": null,
                      "name": "ID_AA64DFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPE_DPFZS is OPTIONAL from Armv8.6.",
          "If x[FEAT_PMUv3p9](feat:FEAT_PMUv3p9) and x[FEAT_SPEv1p4](feat:FEAT_SPEv1p4) are implemented, then FEAT_SPE_DPFZS is implemented.",
          "If FEAT_SPE_DPFZS is implemented, then x[FEAT_PMUv3p7](feat:FEAT_PMUv3p7) and x[FEAT_SPEv1p2](feat:FEAT_SPEv1p2) are implemented.",
          "The following field identifies the presence of FEAT_SPE_DPFZS:",
          " - AArch64-ID_AA64DFR1_EL1.DPFZS."
        ],
        "before": "FEAT_SPE_DPFZS introduces controls to disable cycle counting when event counting is frozen on a Statistical Profiling Buffer Management event."
      },
      "name": "FEAT_SPE_DPFZS",
      "title": "Disable Cycle Counter on SPE Freeze",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap9"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_CRR"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_CRR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_GCS"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_CRR"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_CRR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CRR",
                      "instance": null,
                      "name": "PMSIDR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPE_CRR is OPTIONAL.",
          "In an Armv8.9 implementation, if x[FEAT_SPE](feat:FEAT_SPE) is implemented, FEAT_SPE_CRR is implemented.",
          "If FEAT_SPE_CRR is implemented, then x[FEAT_SPEv1p4](feat:FEAT_SPEv1p4) is implemented.",
          "If x[FEAT_SPE](feat:FEAT_SPE) and x[FEAT_GCS](feat:FEAT_GCS) are implemented, then FEAT_SPE_CRR is implemented.",
          "The following field identifies the presence of FEAT_SPE_CRR:",
          " - AArch64-PMSIDR_EL1.CRR."
        ],
        "before": "FEAT_SPE_CRR extends the x[Operation Type packet](#proto.Operation_Type_packet|D_statistical_profiling_sample_records.fm) to provide more information whether the branch is a procedure call or a procedure return."
      },
      "name": "FEAT_SPE_CRR",
      "title": "Statistical Profiling call return branch records",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EBEP"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap3"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p9"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EBEP"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EBEP"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_EBEP"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_EBEP"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p9"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_EBEP"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "EBEP",
                      "instance": null,
                      "name": "ID_AA64DFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_EBEP is OPTIONAL from Armv9.3.",
          "In an Armv9.3 implementation, if x[FEAT_PMUv3p9](feat:FEAT_PMUv3p9) is implemented, FEAT_EBEP is implemented.",
          "If FEAT_EBEP is implemented, then x[FEAT_PMUv3p8](feat:FEAT_PMUv3p8) is implemented.",
          "When FEAT_EBEP and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_FGT2](feat:FEAT_FGT2) is implemented.",
          "When FEAT_EBEP and x[FEAT_AA32EL0](feat:FEAT_AA32EL0) are implemented, x[FEAT_Debugv8p9](feat:FEAT_Debugv8p9) is implemented.",
          "The following field identifies the presence of FEAT_EBEP:",
          " - AArch64-ID_AA64DFR1_EL1.EBEP.",
          "For more information, see x[Exception-based event profiling](#BABHJIICH8|D_the_performance_monitors_extension.fm)."
        ],
        "before": "FEAT_EBEP provides support for reporting PMU counter overflows as PMU Profiling exceptions. This allows generation of higher quality profiles by eliminating the interrupt latency and jitter incurred outside the PE."
      },
      "name": "FEAT_EBEP",
      "title": "Exception-based Event Profiling",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_SS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_SS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p9"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_SS"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_SS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL1"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_SS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMSS",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_SS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "AST.DotAtom",
                    "values": [
                      {
                        "_type": "AST.Identifier",
                        "value": "PMU"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "PMDEVID"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "PMSS"
                      }
                    ]
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states. The PMU snapshot registers are not accessible from AArch32 state.",
          "FEAT_PMUv3_SS is OPTIONAL from Armv8.8.",
          "If FEAT_PMUv3_SS is implemented, then x[FEAT_PMUv3p9](feat:FEAT_PMUv3p9) is implemented.",
          "When FEAT_PMUv3_SS and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_FGT2](feat:FEAT_FGT2) is implemented.",
          "If FEAT_PMUv3_SS is implemented, then x[FEAT_AA32EL1](feat:FEAT_AA32EL1) is not implemented.",
          "The following fields identify the presence of FEAT_PMUv3_SS:",
          " - AArch64-ID_AA64DFR0_EL1.PMSS.",
          " - PMDEVID.PMSS.",
          "For more information, see x[PMU snapshots](#BABFDIHDF2|D_the_performance_monitors_extension.fm)."
        ],
        "before": "FEAT_PMUv3_SS defines an IMPLEMENTATION DEFINED Snapshot Extension, compatible with the CoreSight PMU Snapshot Extension."
      },
      "name": "FEAT_PMUv3_SS",
      "title": "PMU Snapshot extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPMU"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPMU"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPMU"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SPMU",
                      "instance": null,
                      "name": "ID_AA64DFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_SPMU is OPTIONAL from Armv8.8.",
          "When FEAT_SPMU and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_FGT2](feat:FEAT_FGT2) is implemented.",
          "The following field identifies the presence of FEAT_SPMU:",
          " - AArch64-ID_AA64DFR1_EL1.SPMU.",
          "For more information, see x[System Performance Monitors Extension](spmu_extension|D_the_system_performance_monitors_extension.fm)."
        ],
        "before": "FEAT_SPMU provides a framework of architectural System registers and behaviors for System PMUs, which are PMUs other than the Performance Monitors Extension PMU, that are accessible by the PE."
      },
      "name": "FEAT_SPMU",
      "title": "System Performance Monitors Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_ICNTR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_ICNTR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p9"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_ICNTR"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_ICNTR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMICNTR",
                      "instance": null,
                      "name": "ID_AA64DFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_ICNTR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "AST.DotAtom",
                    "values": [
                      {
                        "_type": "AST.Identifier",
                        "value": "PMU"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "PMCFGR"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "NCG"
                      }
                    ]
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states. The counter is not accessible from AArch32 state.",
          "FEAT_PMUv3_ICNTR is OPTIONAL from Armv8.8.",
          "If FEAT_PMUv3_ICNTR is implemented, then x[FEAT_PMUv3p9](feat:FEAT_PMUv3p9) is implemented.",
          "When FEAT_PMUv3_ICNTR and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_FGT2](feat:FEAT_FGT2) is implemented.",
          "The following fields identify the presence of FEAT_PMUv3_ICNTR:",
          " - AArch64-ID_AA64DFR1_EL1.PMICNTR.",
          " - PMCFGR.NCG.",
          "For more information, see [About the Performance Monitors](#B1chdeejjh)."
        ],
        "before": "FEAT_PMUv3_ICNTR introduces a fixed-function instruction counter to the PMU."
      },
      "name": "FEAT_PMUv3_ICNTR",
      "title": "Fixed-function instruction counter",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p9"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap9"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p9"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p9"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p9"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p9"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PMUVer",
                        "instance": null,
                        "name": "ID_AA64DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 9
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PMUVer",
                        "instance": null,
                        "name": "ID_AA64DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p9"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 9
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p9"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0",
                        "slices": null,
                        "state": "AArch32"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 9
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0",
                        "slices": null,
                        "state": "AArch32"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p9"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMUVer",
                      "instance": null,
                      "name": "EDDFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 9
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMUVer",
                      "instance": null,
                      "name": "EDDFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "<",
              "right": {
                "_type": "AST.Integer",
                "value": 15
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_PMUv3p9 is OPTIONAL from Armv8.8.",
          "In an Armv8.9 implementation, if x[FEAT_PMUv3](feat:FEAT_PMUv3) is implemented, FEAT_PMUv3p9 is implemented.",
          "If FEAT_PMUv3p9 is implemented, then x[FEAT_PMUv3p8](feat:FEAT_PMUv3p8) is implemented.",
          "When FEAT_PMUv3p9 and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_FGT2](feat:FEAT_FGT2) is implemented.",
          "The following fields identify the presence of FEAT_PMUv3p9:",
          " - AArch64-ID_AA64DFR0_EL1.PMUVer.",
          " - AArch64-ID_DFR0_EL1.PerfMon.",
          " - AArch32-ID_DFR0.PerfMon.",
          " - ext-EDDFR.PMUVer.",
          "For more information, see:",
          " - [PMU Overflow external debug request](#BEIBAGAJB2).",
          " - [EL0 access controls](#BABHEGJAD4).",
          " - [PMU Event Descriptions](#chap.event_descriptions).",
          " - [Resetting counters](#BABCFFCCE0)."
        ],
        "before": [
          "FEAT_PMUv3p9 introduces the following to the Performance Monitors Extension:",
          " - Provides finer-grained control over allocation of PMU event counters to an EL0 process.",
          " - Allows an arbitrary combination of event counters and fixed-function counters to be zeroed.",
          " - Provides controls to configure the PMU to directly request the PE enters Debug state without using the CTI.",
          " - Updates PMU event definitions."
        ]
      },
      "name": "FEAT_PMUv3p9",
      "title": "Armv8.9 PMU extensions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "v8Ap7"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The Armv9.2 architecture extension is an extension to Armv9.1. It adds mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv9.2 compliant if all of the following apply:",
          "- It is Armv8.7 compliant.",
          "- It is Armv9.1 compliant.",
          " - It includes all of the Armv9.2 architectural features that are mandatory.",
          "An Armv9.2 compliant implementation can additionally include:",
          " - Armv9.2 features that are optional.",
          "- Any arbitrary subset of the architectural features of Armv9.3, subject only to those constraints that require that certain features be implemented together."
        ]
      },
      "name": "v9Ap2",
      "title": "The Armv9.2 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The Armv8.8 architecture extension is an extension to Armv8.7. It adds mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv8.8 compliant if all of the following apply:",
          "- It is Armv8.7 compliant.",
          " - It includes all of the Armv8.8 architectural features that are mandatory.",
          "An Armv8.8 compliant implementation can additionally include:",
          " - Armv8.8 features that are optional.",
          "- Any arbitrary subset of the architectural features of Armv8.9, subject only to those constraints that require that certain features be implemented together."
        ]
      },
      "name": "v8Ap8",
      "title": "The Armv8.8 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_BRBEv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap3"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_BRBE"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_BRBEv1p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_BRBEv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_BRBE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_BRBEv1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "BRBE",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_BRBEv1p1 is OPTIONAL from Armv9.2.",
          "In an Armv9.3 implementation, if x[FEAT_BRBE](feat:FEAT_BRBE) is implemented, FEAT_BRBEv1p1 is implemented.",
          "If FEAT_BRBEv1p1 is implemented, then x[FEAT_BRBE](feat:FEAT_BRBE) is implemented.",
          "The following field identifies the presence of FEAT_BRBEv1p1:",
          " - AArch64-ID_AA64DFR0_EL1.BRBE.",
          "For more information, see x[The Branch Record Buffer Extension](#brbe_specification|D_the_branch_record_buffer_extension.fm)."
        ],
        "before": "FEAT_BRBEv1p1 extends FEAT_BRBE to enable branch recording at EL3."
      },
      "name": "FEAT_BRBEv1p1",
      "title": "Branch Record Buffer Extension version 1.1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap0"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "v8Ap6"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The Armv9.1 architecture extension is an extension to Armv9.0. It adds mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv9.1 compliant if all of the following apply:",
          "- It is Armv8.6 compliant.",
          "- It is Armv9.0 compliant.",
          " - It includes all of the Armv9.1 architectural features that are mandatory.",
          "An Armv9.1 compliant implementation can additionally include:",
          " - Armv9.1 features that are optional.",
          "- Any arbitrary subset of the architectural features of Armv9.2, subject only to those constraints that require that certain features be implemented together."
        ]
      },
      "name": "v9Ap1",
      "title": "The Armv9.1 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The Armv8.7 architecture extension is an extension to Armv8.6. It adds mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv8.7 compliant if all of the following apply:",
          "- It is Armv8.6 compliant.",
          " - It includes all of the Armv8.7 architectural features that are mandatory.",
          "An Armv8.7 compliant implementation can additionally include:",
          " - Armv8.7 features that are optional.",
          "- Any arbitrary subset of the architectural features of Armv8.8, subject only to those constraints that require that certain features be implemented together."
        ]
      },
      "name": "v8Ap7",
      "title": "The Armv8.7 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_BRBE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_BRBE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "BRBE",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_BRBE is OPTIONAL from Armv9.1.",
          "The following field identifies the presence of FEAT_BRBE:",
          " - AArch64-ID_AA64DFR0_EL1.BRBE.",
          "For more information, see x[The Branch Record Buffer Extension](#brbe_specification|D_the_branch_record_buffer_extension.fm)."
        ],
        "before": "FEAT_BRBE provides a Branch record buffer for capturing control path history."
      },
      "name": "FEAT_BRBE",
      "title": "Branch Record Buffer Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EBF16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EBF16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_BF16"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EBF16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_AdvSIMD"
                },
                "op": "||",
                "right": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_FP"
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_EBF16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "BF16",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_EBF16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "BF16",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_EBF16 is OPTIONAL from Armv8.2.",
          "If FEAT_EBF16 is implemented, then x[FEAT_BF16](feat:FEAT_BF16) is implemented.",
          "If FEAT_EBF16 is implemented, then x[FEAT_AdvSIMD](feat:FEAT_AdvSIMD), x[FEAT_FP](feat:FEAT_FP), x[FEAT_SVE](feat:FEAT_SVE), or x[FEAT_SME](feat:FEAT_SME) is implemented.",
          "The following fields identify the presence of FEAT_EBF16:",
          " - AArch64-ID_AA64ISAR1_EL1.BF16.",
          " - AArch64-ID_AA64ZFR0_EL1.BF16.",
          "For more information, see:",
          " - x[BFloat16 floating-point format](#BABIDCII|A_introduction_to_the_armv8_architecture.fm).",
          " - x[Floating-point behaviors for instructions that calculate sum-of-products](#BABJJEICA4|A_introduction_to_the_armv8_architecture.fm)."
        ],
        "before": "FEAT_EBF16 supports the Extended BFloat16 behaviors."
      },
      "name": "FEAT_EBF16",
      "title": "AArch64 Extended BFloat16 behaviors",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETEv1p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETEv1p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETEv1p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_RME"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETEv1p2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRC_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETEv1p2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "REVISION",
                      "instance": null,
                      "name": "TRCDEVARCH",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRC_SR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETEv1p2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "REVISION",
                      "instance": null,
                      "name": "TRCDEVARCH",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state, and performs trace in both AArch64 and AArch32 states.",
          "FEAT_ETEv1p2 is OPTIONAL from Armv9.1.",
          "If FEAT_ETEv1p2 is implemented, then x[FEAT_ETEv1p1](feat:FEAT_ETEv1p1) is implemented.",
          "If x[FEAT_ETE](feat:FEAT_ETE) and x[FEAT_RME](feat:FEAT_RME) are implemented, then FEAT_ETEv1p2 is implemented.",
          "The following fields identify the presence of FEAT_ETEv1p2:",
          " - ext-TRCDEVARCH.REVISION.",
          " - AArch64-TRCDEVARCH.REVISION.",
          "For more information, see x[The Embedded Trace Extension.](#ete_specification|D_the_embedded_trace_extension.fm)."
        ],
        "before": "FEAT_ETEv1p2 extends FEAT_ETE to support FEAT_RME."
      },
      "name": "FEAT_ETEv1p2",
      "title": "Embedded Trace Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL3"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL2"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_RNG"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_RNG_TRAP"
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_AES"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SHA1"
              }
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Identifier",
                    "value": "FEAT_PMULL"
                  },
                  "op": "&&",
                  "right": {
                    "_type": "AST.Identifier",
                    "value": "FEAT_AES"
                  }
                },
                "op": "&&",
                "right": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_SHA3"
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SHA256"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SHA512"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_RME"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_AES"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SHA1"
              }
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_PMULL128"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_SHA3"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_RME"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETEv1p2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_RME"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p7"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_RME"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MPAM"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_RME"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAMv1p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_PCSRv8"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RME"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RME",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_RME is OPTIONAL from Armv9.1.",
          "If FEAT_RME is implemented, then x[FEAT_AA64EL3](feat:FEAT_AA64EL3), x[FEAT_AA64EL2](feat:FEAT_AA64EL2), and x[FEAT_RNG](feat:FEAT_RNG) or x[FEAT_RNG_TRAP](feat:FEAT_RNG_TRAP) are implemented.",
          "When FEAT_RME and x[FEAT_AES](feat:FEAT_AES) or x[FEAT_SHA1](feat:FEAT_SHA1) are implemented, x[FEAT_PMULL](feat:FEAT_PMULL), x[FEAT_AES](feat:FEAT_AES), x[FEAT_SHA3](feat:FEAT_SHA3), x[FEAT_SHA256](feat:FEAT_SHA256), and x[FEAT_SHA512](feat:FEAT_SHA512) are implemented.",
          "When FEAT_RME, x[FEAT_SVE](feat:FEAT_SVE) and x[FEAT_AES](feat:FEAT_AES) or x[FEAT_SHA1](feat:FEAT_SHA1) are implemented, x[FEAT_SVE_PMULL128](feat:FEAT_SVE_PMULL128), and x[FEAT_SVE_SHA3](feat:FEAT_SVE_SHA3) are implemented.",
          "When x[FEAT_ETE](feat:FEAT_ETE) and FEAT_RME are implemented, x[FEAT_ETEv1p2](feat:FEAT_ETEv1p2) is implemented.",
          "When x[FEAT_PMUv3](feat:FEAT_PMUv3) and FEAT_RME are implemented, x[FEAT_PMUv3p7](feat:FEAT_PMUv3p7) is implemented.",
          "When x[FEAT_SPE](feat:FEAT_SPE) and FEAT_RME are implemented, x[FEAT_SPEv1p2](feat:FEAT_SPEv1p2) is implemented.",
          "When x[FEAT_MPAM](feat:FEAT_MPAM) and FEAT_RME are implemented, x[FEAT_MPAMv1p1](feat:FEAT_MPAMv1p1) is implemented.",
          "If FEAT_RME is implemented, then x[FEAT_PCSRv8](feat:FEAT_PCSRv8) is not implemented.",
          "The following field identifies the presence of FEAT_RME:",
          " - AArch64-ID_AA64PFR0_EL1.RME.",
          "If the Activity Monitors Extension is implemented, then Arm strongly recommends that a PE that implements FEAT_RME also implements x[FEAT_AMUv1p1](FEAT_AMUv1p1|A_armv8_architecture_extensions.fm).",
          "Arm recommends that a PE that implements FEAT_RME also implements all of the following:",
          " - x[FEAT_VMID16](FEAT_VMID16|A_armv8_architecture_extensions.fm).",
          " - x[FEAT_HAFDBS](FEAT_HAFDBS|A_armv8_architecture_extensions.fm).",
          "For more information, see:",
          " - x[The AArch64 System Level Programmers&#180; Model](#CHDJHJJC|D_the_aarch64_system_level_programmers_model.fm).",
          " - x[The AArch64 Virtual Memory System Architecture](#CACIIIJC|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[The Granule Protection Check Mechanism](#BABDHDBGC2|D_the_granule_protection_check_mechanism.fm)."
        ],
        "before": [
          "The Realm Management Extension (RME) is an extension to the Armv9 A-profile architecture.",
          "RME introduces all of the following features:",
          " - Two additional Security states, Root and Realm.",
          " - Two additional physical address spaces, Root and Realm.",
          " - The ability to dynamically transition memory granules between physical address spaces.",
          " - Granule Protection Check mechanism.",
          "FEAT_RME is one component of the Arm Confidential Compute Architecture (Arm CCA). Together with the other components of the Arm CCA, RME enables support for dynamic, attestable, and trusted execution environments (Realms) to be run on an Arm PE."
        ]
      },
      "name": "FEAT_RME",
      "title": "Realm Management Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME_GPC2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME_GPC2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RME_GPC2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RME",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_RME_GPC2 is OPTIONAL from Armv9.4.",
          "If FEAT_RME_GPC2 is implemented, then x[FEAT_RME](feat:FEAT_RME) is implemented.",
          "The following field identifies the presence of FEAT_RME_GPC2:",
          " - AArch64-ID_AA64PFR0_EL1.RME.",
          "For more information, see:",
          " - [GPC faults](#MDSec.gpc_faults).",
          " - [GPI field encoding in GPT descriptors](#MDSec.GPI_field_encoding_in_GPT_descriptors)."
        ],
        "before": [
          "FEAT_RME_GPC2 introduces two mechanisms to the GPC that enable memory isolation models:",
          " - Non-secure Only GPI encoding.",
          " - Physical Address Space Disable."
        ]
      },
      "name": "FEAT_RME_GPC2",
      "title": "RME Granule Protection Check 2 Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME_GPC3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME_GPC3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME_GPC3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME_GPC2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RME_GPC3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RME",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_RME_GPC3 is OPTIONAL from Armv9.5.",
          "If FEAT_RME_GPC3 is implemented, then x[FEAT_RME](feat:FEAT_RME) is implemented.",
          "If FEAT_RME_GPC3 is implemented, then x[FEAT_RME_GPC2](feat:FEAT_RME_GPC2) is implemented.",
          "The following field identifies the presence of FEAT_RME_GPC3:",
          " - AArch64-ID_AA64PFR0_EL1.RME."
        ],
        "before": [
          "FEAT_RME_GPC3 introduces a method for defining a set of windows in the memory map for which Granule Protection Table lookups are skipped, and instead applies a set of default settings associated with the window.",
          "FEAT_RME_GPC3 introduces the APAS system instruction, which provides an architected mechanism for directly programming the PA space association for regions of memory that support memory-side dynamic PA space association."
        ]
      },
      "name": "FEAT_RME_GPC3",
      "title": "RME Granule Protection Check 3 Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME_GDI"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME_GDI"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME_GDI"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME_GPC2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RME_GDI"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RMEGDI",
                      "instance": null,
                      "name": "ID_AA64MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_RME_GDI is OPTIONAL from Armv9.4.",
          "If FEAT_RME_GDI is implemented, then x[FEAT_RME](feat:FEAT_RME) is implemented.",
          "If FEAT_RME_GDI is implemented, then x[FEAT_RME_GPC2](feat:FEAT_RME_GPC2) is implemented.",
          "The following field identifies the presence of FEAT_RME_GDI:",
          " - AArch64-ID_AA64MMFR4_EL1.RMEGDI."
        ],
        "before": "FEAT_RME_GDI introduces additional GPT GPI encodings to enable memory isolation of non-PE data flows from the PEs, within an RME system."
      },
      "name": "FEAT_RME_GDI",
      "title": "RME Granular Data Isolation extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGWTE3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGWTE3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FGWTE3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FGWTE3",
                      "instance": null,
                      "name": "ID_AA64MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_FGWTE3 is OPTIONAL from Armv9.4.",
          "If FEAT_FGWTE3 is implemented, then x[FEAT_EL3](feat:FEAT_EL3) is implemented.",
          "The following field identifies the presence of FEAT_FGWTE3:",
          " - AArch64-ID_AA64MMFR4_EL1.FGWTE3.",
          "For more information, see [EL3 configurable instruction controls](#EL3_configurable_instruction_controls)."
        ],
        "before": "FEAT_FGWTE3 introduces traps for write accesses at EL3 to individual *_EL3 System registers. The traps are independent of existing controls. The bits in the control register x[FGWTE3_EL3](#AArch64.fgwte3_el3|D_aarch64_system_register_descriptions.fm) are sticky, and writes of 0 are ignored."
      },
      "name": "FEAT_FGWTE3",
      "title": "Fine-Grained Write Trap EL3",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_FCMA"
                },
                "op": "&&",
                "right": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_FP16"
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_BF16"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_FHM"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FGT"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_HCX"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SME",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "Types.Field",
              "value": {
                "field": "F16F32",
                "instance": null,
                "name": "ID_AA64SMFR0_EL1",
                "slices": null,
                "state": "AArch64"
              }
            },
            "op": "==",
            "right": {
              "_type": "Values.Value",
              "meaning": null,
              "value": "'1'"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "Types.Field",
              "value": {
                "field": "B16F32",
                "instance": null,
                "name": "ID_AA64SMFR0_EL1",
                "slices": null,
                "state": "AArch64"
              }
            },
            "op": "==",
            "right": {
              "_type": "Values.Value",
              "meaning": null,
              "value": "'1'"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "Types.Field",
              "value": {
                "field": "F32F32",
                "instance": null,
                "name": "ID_AA64SMFR0_EL1",
                "slices": null,
                "state": "AArch64"
              }
            },
            "op": "==",
            "right": {
              "_type": "Values.Value",
              "meaning": null,
              "value": "'1'"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "I8I32",
                    "instance": null,
                    "name": "ID_AA64SMFR0_EL1",
                    "slices": null,
                    "state": "AArch64"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 1
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SME is OPTIONAL from Armv9.2.",
          "If FEAT_SME is implemented, then x[FEAT_FCMA](feat:FEAT_FCMA), x[FEAT_FP16](feat:FEAT_FP16), x[FEAT_BF16](feat:FEAT_BF16), and x[FEAT_FHM](feat:FEAT_FHM) are implemented.",
          "When FEAT_SME and x[FEAT_EL2](feat:FEAT_EL2) are implemented, x[FEAT_FGT](feat:FEAT_FGT) and x[FEAT_HCX](feat:FEAT_HCX) are implemented.",
          "When FEAT_SME and x[FEAT_PMUv3](feat:FEAT_PMUv3) are implemented, x[FEAT_PMUv3p1](feat:FEAT_PMUv3p1) is implemented.",
          "The following fields identify the presence of FEAT_SME:",
          " - AArch64-ID_AA64PFR1_EL1.SME.",
          " - AArch64-ID_AA64SMFR0_EL1.F16F32.",
          " - AArch64-ID_AA64SMFR0_EL1.B16F32.",
          " - AArch64-ID_AA64SMFR0_EL1.F32F32.",
          " - AArch64-ID_AA64SMFR0_EL1.I8I32.",
          "If FEAT_SME is implemented, this does not imply that FEAT_SVE and FEAT_SVE2 are implemented when the PE is not in Streaming SVE mode.",
          "For more information, see x[The Scalable Matrix Extension](#CACHGCHBG5|D_the_scalable_matrix_extension.fm)."
        ],
        "before": [
          "FEAT_SME introduces two AArch64 execution modes that can be enabled and disabled by application software:",
          " - In ZA storage enabled mode, scalable, two-dimensional, architectural ZA tile storage becomes available and instructions are defined to load, store, extract, insert, and clear rows and columns of the ZA tiles.",
          " - In Streaming SVE mode, the Effective SVE vector length changes to match the Effective ZA tile width, support for a substantial subset of the SVE2 instruction set is available, and, when ZA mode is also enabled, instructions are defined that accumulate the matrix outer product of two SVE vectors into a ZA tile."
        ]
      },
      "name": "FEAT_SME",
      "title": "Scalable Matrix Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_F64F64"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_F64F64"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME_F64F64"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "F64F64",
                  "instance": null,
                  "name": "ID_AA64SMFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SME_F64F64 is OPTIONAL from Armv9.2.",
          "If FEAT_SME_F64F64 is implemented, then x[FEAT_SME](feat:FEAT_SME) is implemented.",
          "The following field identifies the presence of FEAT_SME_F64F64:",
          " - AArch64-ID_AA64SMFR0_EL1.F64F64.",
          "For more information, see x[The Scalable Matrix Extension](#CACHGCHBG5|D_the_scalable_matrix_extension.fm)."
        ],
        "before": "FEAT_SME_F64F64 indicates SME support for instructions that accumulate into double-precision floating-point elements in the ZA array."
      },
      "name": "FEAT_SME_F64F64",
      "title": "Double-precision floating-point instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_FA64"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_FA64"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_FA64"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME_FA64"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "FA64",
                  "instance": null,
                  "name": "ID_AA64SMFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SME_FA64 is OPTIONAL from Armv9.2.",
          "If FEAT_SME_FA64 is implemented, then x[FEAT_SME](feat:FEAT_SME) is implemented.",
          "If FEAT_SME_FA64 is implemented, then x[FEAT_SVE2](feat:FEAT_SVE2) is implemented.",
          "The following field identifies the presence of FEAT_SME_FA64:",
          " - AArch64-ID_AA64SMFR0_EL1.FA64.",
          "For more information, see x[The Scalable Matrix Extension](#CACHGCHBG5|D_the_scalable_matrix_extension.fm)."
        ],
        "before": "FEAT_SME_FA64 indicates support for execution of the full A64 instruction set in Streaming SVE mode."
      },
      "name": "FEAT_SME_FA64",
      "title": "Full A64 instruction set support in Streaming SVE mode",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_I16I64"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME_I16I64"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME_I16I64"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "I16I64",
                      "instance": null,
                      "name": "ID_AA64SMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "==",
              "right": {
                "_type": "AST.Integer",
                "value": 15
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SME_I16I64 is OPTIONAL from Armv9.2.",
          "If FEAT_SME_I16I64 is implemented, then x[FEAT_SME](feat:FEAT_SME) is implemented.",
          "The following field identifies the presence of FEAT_SME_I16I64:",
          " - AArch64-ID_AA64SMFR0_EL1.I16I64.",
          "For more information, see x[The Scalable Matrix Extension](#CACHGCHBG5|D_the_scalable_matrix_extension.fm)."
        ],
        "before": "FEAT_SME_I16I64 indicates SME support for instructions that accumulate into 64-bit integer elements in the ZA array."
      },
      "name": "FEAT_SME_I16I64",
      "title": "16-bit to 64-bit integer widening instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.UnaryOp",
              "expr": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA32EL1"
              },
              "op": "!"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_DoubleLock"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETMv4"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "v9Ap0"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_FP"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AdvSIMD"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.BinaryOp",
                    "left": {
                      "_type": "AST.BinaryOp",
                      "left": {
                        "_type": "AST.BinaryOp",
                        "left": {
                          "_type": "AST.Identifier",
                          "value": "FEAT_RDM"
                        },
                        "op": "&&",
                        "right": {
                          "_type": "AST.Identifier",
                          "value": "FEAT_FP16"
                        }
                      },
                      "op": "&&",
                      "right": {
                        "_type": "AST.Identifier",
                        "value": "FEAT_DotProd"
                      }
                    },
                    "op": "&&",
                    "right": {
                      "_type": "AST.Identifier",
                      "value": "FEAT_FHM"
                    }
                  },
                  "op": "&&",
                  "right": {
                    "_type": "AST.Identifier",
                    "value": "FEAT_FCMA"
                  }
                },
                "op": "&&",
                "right": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_JSCVT"
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_FlagM2"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_FRINTTS"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The Armv9.0 architecture extension adds mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv9.0 compliant if all of the following apply:",
          "- It is Armv8.5 compliant.",
          " - It includes all of the Armv9.0 architectural features that are mandatory.",
          "An Armv9.0 compliant implementation can additionally include:",
          " - Armv9.0 features that are optional.",
          "- Any arbitrary subset of the architectural features of Armv9.1, subject only to those constraints that require that certain features be implemented together.",
          "In an Armv9.0 implementation, the AArch32 state might optionally be implemented at EL0. The AArch32 state is not implemented at EL1, EL2, and EL3.",
          "An implementation of Armv9.0 cannot implement [FEAT_DoubleLock](#FEAT_DoubleLock).",
          "An implementation of the Armv9.0 architecture cannot include an ETM.",
          "In an Armv9.0 implementation, if [FEAT_FP](#FEAT_FP) and [FEAT_AdvSIMD](#FEAT_AdvSIMD) are implemented, the following features are implemented:",
          " - [FEAT_RDM](#FEAT_RDM).",
          " - [FEAT_FP16](#FEAT_FP16).",
          " - [FEAT_DotProd](#FEAT_DotProd).",
          " - [FEAT_FHM](#FEAT_FHM).",
          " - [FEAT_FCMA](#FEAT_FCMA).",
          " - [FEAT_JSCVT](#FEAT_JSCVT).",
          " - [FEAT_FlagM2](#FEAT_FlagM2).",
          " - [FEAT_FRINTTS](#FEAT_FRINTTS)."
        ]
      },
      "name": "v9Ap0",
      "title": "The Armv9.0 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Armv9_Crypto"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Crypto"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Armv9_Crypto"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.BinaryOp",
                    "left": {
                      "_type": "AST.Identifier",
                      "value": "FEAT_PMULL"
                    },
                    "op": "&&",
                    "right": {
                      "_type": "AST.Identifier",
                      "value": "FEAT_AES"
                    }
                  },
                  "op": "&&",
                  "right": {
                    "_type": "AST.Identifier",
                    "value": "FEAT_SHA1"
                  }
                },
                "op": "&&",
                "right": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_SHA3"
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SHA256"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SHA512"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_Armv9_Crypto"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_SHA3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_AES"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_PMULL128"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_Armv9_Crypto"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_AES"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_PMULL128"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_SHA3"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_Armv9_Crypto"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_PMULL128"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_AES"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_SHA3"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_Armv9_Crypto is OPTIONAL.",
          "If FEAT_Armv9_Crypto is implemented, then x[FEAT_Crypto](feat:FEAT_Crypto) is implemented.",
          "If FEAT_Armv9_Crypto is implemented, then x[FEAT_PMULL](feat:FEAT_PMULL), x[FEAT_AES](feat:FEAT_AES), x[FEAT_SHA1](feat:FEAT_SHA1), x[FEAT_SHA3](feat:FEAT_SHA3), x[FEAT_SHA256](feat:FEAT_SHA256), and x[FEAT_SHA512](feat:FEAT_SHA512) are implemented.",
          "When FEAT_Armv9_Crypto, x[FEAT_SVE](feat:FEAT_SVE) and x[FEAT_SVE_SHA3](feat:FEAT_SVE_SHA3) are implemented, x[FEAT_SVE_AES](feat:FEAT_SVE_AES), and x[FEAT_SVE_PMULL128](feat:FEAT_SVE_PMULL128) are implemented.",
          "When FEAT_Armv9_Crypto, x[FEAT_SVE](feat:FEAT_SVE) and x[FEAT_SVE_AES](feat:FEAT_SVE_AES) are implemented, x[FEAT_SVE_PMULL128](feat:FEAT_SVE_PMULL128), and x[FEAT_SVE_SHA3](feat:FEAT_SVE_SHA3) are implemented.",
          "When FEAT_Armv9_Crypto, x[FEAT_SVE](feat:FEAT_SVE) and x[FEAT_SVE_PMULL128](feat:FEAT_SVE_PMULL128) are implemented, x[FEAT_SVE_AES](feat:FEAT_SVE_AES), and x[FEAT_SVE_SHA3](feat:FEAT_SVE_SHA3) are implemented.",
          "For more information, see:",
          " - [The Cryptographic Extension in AArch64 state](#AA64_crypto_extension).",
          " - [The Cryptographic Extension in AArch32 state](#AA32_crypto_extension)."
        ],
        "before": "The Armv9 Cryptographic Extension provides instructions for the acceleration of encryption and decryption. The presence of the Cryptographic Extension in an implementation is subject to export license controls."
      },
      "name": "FEAT_Armv9_Crypto",
      "title": "Armv9 Cryptographic Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The Armv8.6 architecture extension is an extension to Armv8.5. It adds mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv8.6 compliant if all of the following apply:",
          "- It is Armv8.5 compliant.",
          " - It includes all of the Armv8.6 architectural features that are mandatory.",
          "An Armv8.6 compliant implementation can additionally include:",
          " - Armv8.6 features that are optional.",
          "- Any arbitrary subset of the architectural features of Armv8.7, subject only to those constraints that require that certain features be implemented together."
        ]
      },
      "name": "v8Ap6",
      "title": "The Armv8.6 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETEv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETEv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRC_SR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETEv1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "REVISION",
                      "instance": null,
                      "name": "TRCDEVARCH",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRC_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETEv1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "REVISION",
                      "instance": null,
                      "name": "TRCDEVARCH",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state, and performs trace in both AArch64 and AArch32 states.",
          "FEAT_ETEv1p1 is OPTIONAL from Armv9.0.",
          "If FEAT_ETEv1p1 is implemented, then x[FEAT_ETE](feat:FEAT_ETE) is implemented.",
          "The following fields identify the presence of FEAT_ETEv1p1:",
          " - AArch64-TRCDEVARCH.REVISION.",
          " - ext-TRCDEVARCH.REVISION.",
          "For more information, see x[The Embedded Trace Extension.](#ete_specification|D_the_embedded_trace_extension.fm)."
        ],
        "before": "FEAT_ETEv1p1 extends FEAT_ETE to provide more flexibility for tracing Timestamp values."
      },
      "name": "FEAT_ETEv1p1",
      "title": "Embedded Trace Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The Armv8.5 architecture extension is an extension to Armv8.4. It adds mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv8.5 compliant if all of the following apply:",
          "- It is Armv8.4 compliant.",
          " - It includes all of the Armv8.5 architectural features that are mandatory.",
          "An Armv8.5 compliant implementation can additionally include:",
          " - Armv8.5 features that are optional.",
          "- Any arbitrary subset of the architectural features of Armv8.6, subject only to those constraints that require that certain features be implemented together."
        ]
      },
      "name": "v8Ap5",
      "title": "The Armv8.5 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_DoPD"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_DoPD"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_DoubleLock"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_DoPD"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_DoPD"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "DebugPower",
                    "instance": null,
                    "name": "EDDEVID",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 1
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_DoPD is OPTIONAL from Armv8.2.",
          "If FEAT_DoPD is implemented, then x[FEAT_DoubleLock](feat:FEAT_DoubleLock) is not implemented.",
          "If FEAT_DoPD is implemented, then x[FEAT_Debugv8p2](feat:FEAT_Debugv8p2) is implemented.",
          "The following field identifies the presence of FEAT_DoPD:",
          " - ext-EDDEVID.DebugPower.",
          "For more information, see x[Debug Reset and Powerdown Support](#CIHDDAFB|H_debug_reset_and_powerdown_support.fm)."
        ],
        "before": [
          "FEAT_DoPD provides a debug programmers' model where all debug and PMU registers are in the Core power domain and all CTI registers are in the Debug power domain. Power control is provided by an OPTIONAL external powerup request mechanism.",
          "When FEAT_DoPD is implemented:",
          " - The optional Software Lock is not implemented by the architecturally defined debug components in the PE Core power domain.",
          " - If an ETMv4 trace unit is implemented, the ETM must implement:",
          [
            "     - ETMv4.2 or later.",
            "     - The Unified Power Domain Model."
          ],
          " - If x[FEAT_ETE](FEAT_ETE|A_armv8_architecture_extensions.fm) is implemented, the trace unit always implements a single power domain."
        ]
      },
      "name": "FEAT_DoPD",
      "title": "Debug over Powerdown",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRF"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRC_SR"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETMv4"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p1"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state, and performs trace in both AArch64 and AArch32 states.",
          "FEAT_ETE is OPTIONAL from Armv9.0.",
          "If FEAT_ETE is implemented, then x[FEAT_TRBE](feat:FEAT_TRBE) is implemented.",
          "If FEAT_ETE is implemented, then x[FEAT_TRF](feat:FEAT_TRF) is implemented.",
          "If FEAT_ETE is implemented, then x[FEAT_TRC_SR](feat:FEAT_TRC_SR) is implemented.",
          "If FEAT_ETE is implemented, then x[FEAT_ETMv4](feat:FEAT_ETMv4) is not implemented.",
          "When FEAT_ETE and x[FEAT_PMUv3](feat:FEAT_PMUv3) are implemented, x[FEAT_PMUv3p1](feat:FEAT_PMUv3p1) is implemented.",
          "For more information, see x[The Embedded Trace Extension](#ete_specification|D_the_embedded_trace_extension.fm)."
        ],
        "before": "FEAT_ETE provides a trace unit that records details about software control flow running on a PE, which can be used to aid debugging or optimizing. The trace unit provides filtering functionality to allow the targeting of the information to specific code regions or periods of operation."
      },
      "name": "FEAT_ETE",
      "title": "Embedded Trace Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_AES"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_AES"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SSVE_AES"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_AES"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_PMULL128"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_PMULL128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_AES"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_AES"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Armv9_Crypto"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_AES"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AES",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SVE_AES is OPTIONAL from Armv9.0.",
          "If FEAT_SVE_AES is implemented, then x[FEAT_SVE2](feat:FEAT_SVE2) or x[FEAT_SSVE_AES](feat:FEAT_SSVE_AES) is implemented.",
          "If FEAT_SVE_AES is implemented, then x[FEAT_SVE_PMULL128](feat:FEAT_SVE_PMULL128) is implemented.",
          "If x[FEAT_SVE_PMULL128](feat:FEAT_SVE_PMULL128) is implemented, then FEAT_SVE_AES is implemented.",
          "If FEAT_SVE_AES is implemented, then x[FEAT_Armv9_Crypto](feat:FEAT_Armv9_Crypto) is implemented.",
          "The following field identifies the presence of FEAT_SVE_AES:",
          " - AArch64-ID_AA64ZFR0_EL1.AES."
        ],
        "before": [
          "FEAT_SVE_AES provides the following scalable vector AES cryptographic instructions:",
          " - x[AESD](#A64.instructions.aesd_z_zz|C_sve_instructions.fm).",
          " - x[AESE](#A64.instructions.AESE_advsimd|C_a64_adv_simd_and_floating_point__.fm).",
          " - x[AESIMC](#A32T32-fpsimd.instructions.AESIMC|F_t32_a32_adv_simd_fp_instruction_descriptions.fm).",
          " - x[AESMC](#A64.instructions.AESMC_advsimd|C_a64_adv_simd_and_floating_point__.fm).",
          " - x[PMULLB](#A64.instructions.pmullb_z_zz|C_sve_instructions.fm).",
          " - x[PMULLT](#A64.instructions.pmullt_z_zz|C_sve_instructions.fm)."
        ]
      },
      "name": "FEAT_SVE_AES",
      "title": "Scalable Vector AES instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE2p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap4"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE2p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE2p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2p1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE2p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SVEver",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SVE2p1 is OPTIONAL from Armv9.2.",
          "In an Armv9.4 implementation, if x[FEAT_SVE2](feat:FEAT_SVE2) is implemented, FEAT_SVE2p1 is implemented.",
          "If FEAT_SVE2p1 is implemented, then x[FEAT_SVE2](feat:FEAT_SVE2) is implemented.",
          "If x[FEAT_SVE2](feat:FEAT_SVE2) and x[FEAT_SME2p1](feat:FEAT_SME2p1) are implemented, then FEAT_SVE2p1 is implemented.",
          "The following field identifies the presence of FEAT_SVE2p1:",
          " - AArch64-ID_AA64ZFR0_EL1.SVEver.",
          "For more information, see:",
          " - x[FEAT_SVE](FEAT_SVE|A_armv8_architecture_extensions.fm).",
          " - x[Loads and stores - SME, SME2, SVE2p1](#BABEFDAGJ3|C_a64_instruction_set_overview.fm).",
          " - x[Data processing - SVE2](#CEGCJJADG1|C_a64_instruction_set_overview.fm)."
        ],
        "before": [
          "The Scalable Vector Extension version 2.1 (SVE2.1) is a superset of SVE2 that adds:",
          " - SVE instructions in Non-streaming SVE mode, which were previously added by SME in Streaming SVE mode. These are:",
          "     - Contiguous multi-vector load and store instructions.",
          "     - Predicate-as-counter instructions.",
          "     - General-purpose SVE instructions.",
          " - Other relaxations and enhancements.",
          "In this Manual, unless stated otherwise, when SVE is used, the behavior also applies to SVE2.1."
        ]
      },
      "name": "FEAT_SVE2p1",
      "title": "Scalable Vector Extensions version 2.1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE2p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE2p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE2p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2p2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE2p2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2p2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SVEver",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SVE2p2 is OPTIONAL from Armv9.5.",
          "If FEAT_SVE2p2 is implemented, then x[FEAT_SVE2p1](feat:FEAT_SVE2p1) is implemented.",
          "If x[FEAT_SVE2](feat:FEAT_SVE2) and x[FEAT_SME2p2](feat:FEAT_SME2p2) are implemented, then FEAT_SVE2p2 is implemented.",
          "The following field identifies the presence of FEAT_SVE2p2:",
          " - AArch64-ID_AA64ZFR0_EL1.SVEver.",
          "For more information, see:",
          " - x[Predicate element index](#SVE2_predicate_element_index).",
          " - x[Floating-point round](#SVE2_floatingpoint_round).",
          " - x[Vector permutation](#BABIGDHIB4)."
        ],
        "before": [
          "The Scalable Vector Extension version 2.2 (SVE2.2) is a superset of SVE2.1 that adds:",
          [
            " - Floating-point round to integral floating-point value instructions.",
            " - Scalar index of first/last true predicate element.",
            " - Zeroing-predication variant to all SVE unary instructions.",
            " - Additional variants of <instruction>COMPACT</instruction> and <instruction>EXPAND</instruction> instructions."
          ]
        ]
      },
      "name": "FEAT_SVE2p2",
      "title": "Scalable Vector Extensions version 2.2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_BitPerm"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_BitPerm"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SSVE_BitPerm"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_BitPerm"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SSVE_BitPerm"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "SBitPerm",
                  "instance": null,
                  "name": "ID_AA64SMFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SSVE_BitPerm is OPTIONAL from Armv9.4.",
          "If FEAT_SSVE_BitPerm is implemented, then x[FEAT_SME2p1](feat:FEAT_SME2p1) is implemented.",
          "When FEAT_SSVE_BitPerm and x[FEAT_SVE2](feat:FEAT_SVE2) is implemented, x[FEAT_SVE_BitPerm](feat:FEAT_SVE_BitPerm) is implemented.",
          "The following field identifies the presence of FEAT_SSVE_BitPerm:",
          " - AArch64-ID_AA64SMFR0_EL1.SBitPerm.",
          "For more information, see:",
          " - x[Bit permutation](#BABFAEAJC2)."
        ],
        "before": "FEAT_SSVE_BitPerm implements the SVE2 bit permute instructions, identified as implemented by AArch64-ID_AA64ZFR0_EL1.BitPerm, when the PE is in Streaming SVE mode."
      },
      "name": "FEAT_SSVE_BitPerm",
      "title": "Streaming Scalable Vector Bit Permutes instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_FEXPA"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSVE_FEXPA"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SME2p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SSVE_FEXPA"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "SFEXPA",
                  "instance": null,
                  "name": "ID_AA64SMFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SSVE_FEXPA is OPTIONAL from Armv9.4.",
          "If FEAT_SSVE_FEXPA is implemented, then x[FEAT_SME2p1](feat:FEAT_SME2p1) is implemented.",
          "The following field identifies the presence of FEAT_SSVE_FEXPA:",
          " - AArch64-ID_AA64SMFR0_EL1.SFEXPA."
        ],
        "before": "FEAT_SSVE_FEXPA implements the SVE FEXPA instruction when the PE is in Streaming SVE mode."
      },
      "name": "FEAT_SSVE_FEXPA",
      "title": "Streaming FEXPA instruction",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_BitPerm"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_BitPerm"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_BitPerm"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "BitPerm",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SVE_BitPerm is OPTIONAL from Armv9.0.",
          "If FEAT_SVE_BitPerm is implemented, then x[FEAT_SVE2](feat:FEAT_SVE2) is implemented.",
          "The following field identifies the presence of FEAT_SVE_BitPerm:",
          " - AArch64-ID_AA64ZFR0_EL1.BitPerm.",
          "For more information, see:",
          " - x[Bit permutation](#BABFAEAJC2)."
        ],
        "before": [
          "FEAT_SVE_BitPerm provides the following scalable vector bit permute instructions:",
          " - x[BEXT](#A64.instructions.bext_z_zz|C_sve_instructions.fm).",
          " - x[BDEP](#A64.instructions.bdep_z_zz|C_sve_instructions.fm).",
          " - x[BGRP](#A64.instructions.bgrp_z_zz|C_sve_instructions.fm)."
        ]
      },
      "name": "FEAT_SVE_BitPerm",
      "title": "Scalable Vector Bit Permutes instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_PMULL128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_PMULL128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SSVE_AES"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_PMULL128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_AES"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_PMULL128"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AES",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SVE_PMULL128 is OPTIONAL from Armv9.0.",
          "If FEAT_SVE_PMULL128 is implemented, then x[FEAT_SVE2](feat:FEAT_SVE2) or x[FEAT_SSVE_AES](feat:FEAT_SSVE_AES) is implemented.",
          "If FEAT_SVE_PMULL128 is implemented, then x[FEAT_SVE_AES](feat:FEAT_SVE_AES) is implemented.",
          "The following field identifies the presence of FEAT_SVE_PMULL128:",
          " - AArch64-ID_AA64ZFR0_EL1.AES."
        ],
        "before": "FEAT_SVE_PMULL128 implements the SVE single-vector Advanced Encryption Standard and 128-bit destination element variants of x[PMULLB](#A64.instructions.pmullb_z_zz|C_sve_instructions.fm) and x[PMULLT](#A64.instructions.pmullt_z_zz|C_sve_instructions.fm) instructions, when the PE is not in Streaming SVE mode."
      },
      "name": "FEAT_SVE_PMULL128",
      "title": "SVE single-vector Advanced Encryption Standard and 128-bit polynomial multiply long instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_AES2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_AES2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_PMULL128"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_AES2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2p1"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SSVE_AES"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_AES2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AES",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SVE_AES2 is OPTIONAL from Armv9.5.",
          "If FEAT_SVE_AES2 is implemented, then x[FEAT_SVE_PMULL128](feat:FEAT_SVE_PMULL128) is implemented.",
          "If FEAT_SVE_AES2 is implemented, then x[FEAT_SVE2p1](feat:FEAT_SVE2p1) or x[FEAT_SSVE_AES](feat:FEAT_SSVE_AES) is implemented.",
          "The following field identifies the presence of FEAT_SVE_AES2:",
          " - AArch64-ID_AA64ZFR0_EL1.AES.",
          "For more information, see:",
          " - x[AES-128 instructions](#SVE_AES128_instructions).",
          " - x[Polynomial arithmetic](#BABEAGIIG1)."
        ],
        "before": "FEAT_SVE_AES2 implements the SVE multi-vector Advanced Encryption Standard and 128-bit destination element polynomial multiply long instructions, when the PE is not in Streaming SVE mode."
      },
      "name": "FEAT_SVE_AES2",
      "title": "SVE multi-vector Advanced Encryption Standard and 128-bit polynomial multiply long instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_SHA3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_SHA3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SME2p1"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_SHA3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Armv9_Crypto"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_SHA3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SHA3",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SVE_SHA3 is OPTIONAL from Armv9.0.",
          "If FEAT_SVE_SHA3 is implemented, then x[FEAT_SVE2](feat:FEAT_SVE2) or x[FEAT_SME2p1](feat:FEAT_SME2p1) is implemented.",
          "If FEAT_SVE_SHA3 is implemented, then x[FEAT_Armv9_Crypto](feat:FEAT_Armv9_Crypto) is implemented.",
          "The following field identifies the presence of FEAT_SVE_SHA3:",
          " - AArch64-ID_AA64ZFR0_EL1.SHA3."
        ],
        "before": [
          "FEAT_SVE_SHA3 provides the following scalable vector SHA3 instruction:",
          " - x[RAX1](#A64.instructions.RAX1_advsimd|C_a64_adv_simd_and_floating_point__.fm)."
        ]
      },
      "name": "FEAT_SVE_SHA3",
      "title": "Scalable Vector SHA3 instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_SM4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_SM4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_SM4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SM4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_SM4"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SM4",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SVE_SM4 is OPTIONAL from Armv9.0.",
          "If FEAT_SVE_SM4 is implemented, then x[FEAT_SVE2](feat:FEAT_SVE2) is implemented.",
          "If FEAT_SVE_SM4 is implemented, then x[FEAT_SM4](feat:FEAT_SM4) is implemented.",
          "The following field identifies the presence of FEAT_SVE_SM4:",
          " - AArch64-ID_AA64ZFR0_EL1.SM4."
        ],
        "before": [
          "FEAT_SVE_SM4 provides the following scalable vector SM4 instructions:",
          " - x[SM4E](#A64.instructions.sm4e_z_zz|C_sve_instructions.fm).",
          " - x[SM4EKEY](#A64.instructions.SM4EKEY_advsimd|C_a64_adv_simd_and_floating_point__.fm)."
        ]
      },
      "name": "FEAT_SVE_SM4",
      "title": "Scalable Vector SM4 instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SVEver",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SVE2 is OPTIONAL from Armv9.0.",
          "If FEAT_SVE2 is implemented, then x[FEAT_SVE](feat:FEAT_SVE) is implemented.",
          "The following field identifies the presence of FEAT_SVE2:",
          " - AArch64-ID_AA64ZFR0_EL1.SVEver.",
          "For more information, see:",
          " - x[FEAT_SVE](FEAT_SVE|A_armv8_architecture_extensions.fm).",
          " - x[Data processing - SVE2](#CEGCJJADG1|C_a64_instruction_set_overview.fm)."
        ],
        "before": "The <i>Scalable Vector Extension version 2</i> (SVE2) is a superset of SVE that incorporates functionality similar to Advanced SIMD, and other enhancements. In this Manual, unless stated otherwise, when SVE is used, the behavior also applies to SVE2. All Armv9-A systems that support standard operating systems with rich application environments also provide hardware support for SVE2 instructions."
      },
      "name": "FEAT_SVE2",
      "title": "Scalable Vector Extension version 2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LSFE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LSFE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LSFE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LSFE",
                      "instance": null,
                      "name": "ID_AA64ISAR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_LSFE is OPTIONAL from Armv9.3.",
          "If FEAT_LSFE is implemented, then x[FEAT_FP](feat:FEAT_FP) is implemented.",
          "The following field identifies the presence of FEAT_LSFE:",
          " - AArch64-ID_AA64ISAR3_EL1.LSFE.",
          "For more information, see:",
          " - x[Atomic floating-point memory operations](#atomic_fp_mem_ops)."
        ],
        "before": "FEAT_LSFE implements A64 base Atomic floating-point in-memory instructions."
      },
      "name": "FEAT_LSFE",
      "title": "Large System Float Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FPRCVT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FPRCVT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FPRCVT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FPRCVT",
                      "instance": null,
                      "name": "ID_AA64ISAR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_FPRCVT is OPTIONAL from Armv9.5.",
          "If FEAT_FPRCVT is implemented, then x[FEAT_FP](feat:FEAT_FP) is implemented.",
          "The following field identifies the presence of FEAT_FPRCVT:",
          " - AArch64-ID_AA64ISAR3_EL1.FPRCVT.",
          "For more information, see:",
          " - x[Floating-point conversion](#CHDGHEIE)."
        ],
        "before": [
          "FEAT_FPRCVT introduces A64 base floating-point to integer and integer to floating-point convert instructions with only scalar SIMD&FP register operands and results, and with different input and output register sizes.",
          "FEAT_FPRCVT implements the Advanced SIMD scalar floating-point to integer and integer to floating-point convert instructions with only scalar SIMD&FP register operands and results, and with different and same input and output register sizes, when the PE is in Streaming SVE mode."
        ]
      },
      "name": "FEAT_FPRCVT",
      "title": "Floating-Point to/from Integer in Scalar FP register",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_F16F32MM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_F16F32MM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE2p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_F16F32MM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "F16MM",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SVE_F16F32MM is OPTIONAL from Armv9.2.",
          "If FEAT_SVE_F16F32MM is implemented, then x[FEAT_SVE2p1](feat:FEAT_SVE2p1) is implemented.",
          "The following field identifies the presence of FEAT_SVE_F16F32MM:",
          " - AArch64-ID_AA64ZFR0_EL1.F16MM.",
          "For more information, see:",
          " - x[Floating-point matrix multiply-accumulate](#SVE2_FP_matmul-accumulate)."
        ],
        "before": "FEAT_SVE_F16F32MM introduces the SVE half-precision floating-point matrix multiply-accumulate to single-precision instruction."
      },
      "name": "FEAT_SVE_F16F32MM",
      "title": "SVE Half-precision floating-point matrix multiply-accumulate to single-precision",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_F8F16MM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_F8F16MM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_F8F32MM"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_F8F16MM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8DOT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_F8F16MM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "F8MM4",
                  "instance": null,
                  "name": "ID_AA64FPFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_F8F16MM is OPTIONAL from Armv9.2.",
          "If FEAT_F8F16MM is implemented, then x[FEAT_F8F32MM](feat:FEAT_F8F32MM) is implemented.",
          "If FEAT_F8F16MM is implemented, then x[FEAT_FP8DOT2](feat:FEAT_FP8DOT2) is implemented.",
          "The following field identifies the presence of FEAT_F8F16MM:",
          " - AArch64-ID_AA64FPFR0_EL1.F8MM4.",
          "For more information, see:",
          " - For Advanced SIMD: x[FP8 matrix multiply-accumulate](#SIMD_FP8_matrix_matmulaccumulate).",
          " - For SVE: x[FP8 floating-point matrix multiply-accumulate](#SVE2_FP8_matmul-accumulate)."
        ],
        "before": [
          "FEAT_F8F16MM introduces the Advanced SIMD 8-bit floating-point matrix multiply-accumulate to half-precision instruction.",
          "If FEAT_SVE2 is implemented, FEAT_F8F16MM implements the SVE 8-bit floating-point matrix multiply-accumulate to half-precision instruction, when the PE is not in Streaming SVE mode."
        ]
      },
      "name": "FEAT_F8F16MM",
      "title": "8-bit floating-point matrix multiply-accumulate to half-precision",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_F8F32MM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_F8F32MM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP8DOT4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_F8F32MM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "F8MM8",
                  "instance": null,
                  "name": "ID_AA64FPFR0_EL1",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "==",
              "right": {
                "_type": "Values.Value",
                "meaning": null,
                "value": "'1'"
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_F8F32MM is OPTIONAL from Armv9.2.",
          "If FEAT_F8F32MM is implemented, then x[FEAT_FP8DOT4](feat:FEAT_FP8DOT4) is implemented.",
          "The following field identifies the presence of FEAT_F8F32MM:",
          " - AArch64-ID_AA64FPFR0_EL1.F8MM8.",
          "For more information, see:",
          " - For Advanced SIMD: x[FP8 matrix multiply-accumulate](#SIMD_FP8_matrix_matmulaccumulate).",
          " - For SVE: x[FP8 floating-point matrix multiply-accumulate](#SVE2_FP8_matmul-accumulate)."
        ],
        "before": [
          "FEAT_F8F32MM introduces the Advanced SIMD 8-bit floating-point matrix multiply-accumulate to single-precision instruction.",
          "If FEAT_SVE2 is implemented, FEAT_F8F32MM implements the SVE 8-bit floating-point matrix multiply-accumulate to single-precision instruction, when the PE is not in Streaming SVE mode."
        ]
      },
      "name": "FEAT_F8F32MM",
      "title": "8-bit floating-point matrix multiply-accumulate to single-precision",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_BFSCALE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_BFSCALE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE_B16B16"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE_BFSCALE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "B16B16",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SVE_BFSCALE is OPTIONAL from Armv9.2.",
          "If FEAT_SVE_BFSCALE is implemented, then x[FEAT_SVE_B16B16](feat:FEAT_SVE_B16B16) is implemented.",
          "The following field identifies the presence of FEAT_SVE_BFSCALE:",
          " - AArch64-ID_AA64ZFR0_EL1.B16B16.",
          "For more information, see:",
          " - For SVE: x[Floating-point adjust exponent](#SVE2_fp_adj_exponent).",
          " - For SME: x[Floating-point adjust exponent](#BABHJAFHF2)."
        ],
        "before": [
          "FEAT_SVE_BFSCALE introduces the following:",
          " - If x[FEAT_SVE2](FEAT_SVE2) is implemented, the SVE <instruction>BFSCALE</instruction> instruction when the PE is not in Streaming SVE mode.",
          " - If x[FEAT_SME2](FEAT_SME2) is implemented, the SVE <instruction>BFSCALE</instruction> instruction when the PE is in Streaming SVE mode, and the SME multi-vector Z-targeting BFloat16 scaling instructions, <instruction>BFSCALE</instruction> and <instruction>BFMUL</instruction>."
        ]
      },
      "name": "FEAT_SVE_BFSCALE",
      "title": "BFloat16 Floating-Point Adjust Exponent",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRF"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRBE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRBE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRBE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TraceBuffer",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state, and collects trace in both AArch64 and AArch32 states.",
          "FEAT_TRBE is OPTIONAL from Armv9.0.",
          "If FEAT_TRBE is implemented, then x[FEAT_TRF](feat:FEAT_TRF) is implemented.",
          "If FEAT_TRBE is implemented, then x[FEAT_ETE](feat:FEAT_ETE) is implemented.",
          "When FEAT_TRBE and x[FEAT_PMUv3](feat:FEAT_PMUv3) are implemented, x[FEAT_PMUv3p1](feat:FEAT_PMUv3p1) is implemented.",
          "The following field identifies the presence of FEAT_TRBE:",
          " - AArch64-ID_AA64DFR0_EL1.TraceBuffer.",
          "For more information, see x[The Trace Buffer Extension](#trbe_specification|D_the_trace_buffer_extension.fm)."
        ],
        "before": "FEAT_TRBE enables support for a Trace Buffer Unit within a PE. When the Trace Buffer Unit is enabled, program-flow trace generated by a trace unit is written directly to memory by the Trace Buffer Unit, rather than routing trace data to a trace sink."
      },
      "name": "FEAT_TRBE",
      "title": "Trace Buffer Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p9"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap9"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p9"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p9"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p9"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p9"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DebugVer",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 11
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p9"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CopDbg",
                      "instance": null,
                      "name": "ID_DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 11
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p9"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CopDbg",
                      "instance": null,
                      "name": "ID_DFR0",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 11
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p9"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "Version",
                      "instance": null,
                      "name": "DBGDIDR",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 11
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p9"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "ARCHVER",
                    "instance": null,
                    "name": "EDDEVARCH",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 11
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p9"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "HSR",
                    "instance": null,
                    "name": "EDDEVID1",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 2
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_Debugv8p9 is OPTIONAL from Armv8.8.",
          "FEAT_Debugv8p9 is mandatory from Armv8.9.",
          "If FEAT_Debugv8p9 is implemented, then x[FEAT_Debugv8p8](feat:FEAT_Debugv8p8) is implemented.",
          "When FEAT_Debugv8p9 and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_FGT2](feat:FEAT_FGT2) is implemented.",
          "The following fields identify the presence of FEAT_Debugv8p9:",
          " - AArch64-ID_AA64DFR0_EL1.DebugVer.",
          " - AArch64-ID_DFR0_EL1.CopDbg.",
          " - AArch32-ID_DFR0.CopDbg.",
          " - AArch32-DBGDIDR.Version.",
          " - ext-EDDEVARCH.ARCHVER.",
          " - ext-EDDEVID1.HSR.",
          "For more information, see:",
          " - x[About Breakpoint exceptions](#CJACHJCA|D_aarch64_self_hosted_debug.fm).",
          " - x[About Watchpoint exceptions](#BCGJJIJB|D_aarch64_self_hosted_debug.fm)."
        ],
        "before": [
          "FEAT_Debugv8p9 introduces all of the following:",
          " - The ability to implement more than 16 breakpoints.",
          " - The ability to implement more than 16 watchpoints.",
          " - x[DBGBCR&lt;n&gt;_EL1](#ext.dbgbcrn_el1|H_external_debug_register_descriptions.fm) and x[DBGWCR&lt;n&gt;_EL1](#ext.dbgwcrn_el1|H_external_debug_register_descriptions.fm) are 64-bit registers in the external debug interface.",
          " - x[DSPSR2](#AArch32.dspsr2|G_aarch32_system_register_descriptions.fm) is added to extend x[DSPSR](#AArch32.dspsr|G_aarch32_system_register_descriptions.fm) for holding the saved process state for Debug state."
        ]
      },
      "name": "FEAT_Debugv8p9",
      "title": "Debug v8.9",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ABLE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ABLE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_BWE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ABLE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p9"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ABLE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ABLE",
                      "instance": null,
                      "name": "ID_AA64DFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ABLE"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "ABLE",
                    "instance": null,
                    "name": "EDDFR1",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 1
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_ABLE is OPTIONAL from Armv9.3.",
          "If FEAT_ABLE is implemented, then x[FEAT_BWE](feat:FEAT_BWE) is implemented.",
          "If FEAT_ABLE is implemented, then x[FEAT_Debugv8p9](feat:FEAT_Debugv8p9) is implemented.",
          "The following fields identify the presence of FEAT_ABLE:",
          " - AArch64-ID_AA64DFR1_EL1.ABLE.",
          " - ext-EDDFR1.ABLE.",
          "For more information, see x[About Breakpoint exceptions](#CJACHJCA|D_aarch64_self_hosted_debug.fm)."
        ],
        "before": "FEAT_ABLE introduces the capability to link a watchpoint to an address matching breakpoint."
      },
      "name": "FEAT_ABLE",
      "title": "Address Breakpoint Linking Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PCSRv8p9"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PCSRv8p9"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PCSRv8p2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PCSRv8p9"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "AST.DotAtom",
                    "values": [
                      {
                        "_type": "AST.Identifier",
                        "value": "PMU"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "PMDEVID"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "PCSample"
                      }
                    ]
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_PCSRv8p9 is OPTIONAL from Armv8.8.",
          "If FEAT_PCSRv8p9 is implemented, then x[FEAT_PCSRv8p2](feat:FEAT_PCSRv8p2) is implemented.",
          "The following field identifies the presence of FEAT_PCSRv8p9:",
          " - PMDEVID.PCSample.",
          "For more information, see x[Suspending and activating PC Sample-based Profiling](#CEGIHAIBH4|H_the_sample_based_profiling__.fm)."
        ],
        "before": "FEAT_PCSRv8p9 introduces a mechanism to suspend PC Sample-based Profiling."
      },
      "name": "FEAT_PCSRv8p9",
      "title": "Armv8.9 PC Sample-based Profiling Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LRCPC3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LRCPC3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LRCPC2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LRCPC3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LRCPC",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_LRCPC3 is OPTIONAL from Armv8.2.",
          "If FEAT_LRCPC3 is implemented, then x[FEAT_LRCPC2](feat:FEAT_LRCPC2) is implemented.",
          "The following field identifies the presence of FEAT_LRCPC3:",
          " - AArch64-ID_AA64ISAR1_EL1.LRCPC.",
          "For more information, see:",
          " - x[Changes to single-copy atomicity in Armv8.4](#CHDDFGBI|B_the_aarch64_application_level_memory_model.fm).",
          " - x[Load-Acquire/Store-Release](#CHDHFBEC|C_a64_instruction_set_overview.fm).",
          " - x[A64 instructions that are changed in Debug state](#CACDFIBC|H_debug_state.fm)."
        ],
        "before": "FEAT_LRCPC3 introduces variants of load/store pair and load/store single register instructions, with release consistency, to optimize additional use cases where ordering is required. FEAT_LRCPC3 also introduces a set of additional load/store instructions with release consistency ordering in the Advanced SIMD and floating-point instruction set."
      },
      "name": "FEAT_LRCPC3",
      "title": "Load-Acquire RCpc instructions version 3",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CMOW"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_CMOW"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CMOW"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CMOW",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only, but also impacts AArch32 instructions.",
          "FEAT_CMOW is OPTIONAL from Armv8.7.",
          "FEAT_CMOW is mandatory from Armv8.8.",
          "The following field identifies the presence of FEAT_CMOW:",
          " - AArch64-ID_AA64MMFR1_EL1.CMOW.",
          "For more information, see:",
          " - x[A64 Cache maintenance instructions](#CHDBFICH|D_the_aarch64_system_level_memory_model.fm).",
          " - x[Permission fault](#MDSec.Permission_fault|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": [
          "FEAT_CMOW introduces support for controlling the required permissions for some cache maintenance instructions that operate by VA and perform translation such that:",
          " - Stage 1 can be configured to generate a Permission fault if write permission is not present for cache maintenance instructions executed at EL0.",
          " - Stage 2 can be configured to generate a Permission fault if write permission is not present for cache maintenance instructions executed at EL1 or EL0."
        ]
      },
      "name": "FEAT_CMOW",
      "title": "Control for cache maintenance permission",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_OCCMO"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap6"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_OCCMO"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_OCCMO"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "OCCMO",
                      "instance": null,
                      "name": "ID_AA64ISAR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_OCCMO is OPTIONAL from Armv9.3.",
          "FEAT_OCCMO is mandatory from Armv9.6.",
          "The following field identifies the presence of FEAT_OCCMO:",
          " - AArch64-ID_AA64ISAR3_EL1.OCCMO."
        ],
        "before": "FEAT_OCCMO introduces the DC CIVAOC system instruction that provides software with a mechanism to publish writes to the Outer cache level."
      },
      "name": "FEAT_OCCMO",
      "title": "Outer Cacheable Cache Maintenance Operation",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p8"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DebugVer",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 10
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p8"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CopDbg",
                      "instance": null,
                      "name": "ID_DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 10
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p8"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "Version",
                      "instance": null,
                      "name": "DBGDIDR",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 10
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p8"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CopDbg",
                      "instance": null,
                      "name": "ID_DFR0",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 10
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p8"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "ARCHVER",
                    "instance": null,
                    "name": "EDDEVARCH",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 10
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_Debugv8p8 is OPTIONAL from Armv8.7.",
          "FEAT_Debugv8p8 is mandatory from Armv8.8.",
          "If FEAT_Debugv8p8 is implemented, then x[FEAT_Debugv8p4](feat:FEAT_Debugv8p4) is implemented.",
          "The following fields identify the presence of FEAT_Debugv8p8:",
          " - AArch64-ID_AA64DFR0_EL1.DebugVer.",
          " - AArch64-ID_DFR0_EL1.CopDbg.",
          " - AArch32-DBGDIDR.Version.",
          " - AArch32-ID_DFR0.CopDbg.",
          " - ext-EDDEVARCH.ARCHVER.",
          "For more information, see x[Exception Catch debug event](#exception_catch_debug_event|H_halting_debug_events.fm)."
        ],
        "before": "FEAT_Debugv8p8 introduces support to allow another exception to be taken after an exception which generates an Exception Catch debug event, before the PE halts."
      },
      "name": "FEAT_Debugv8p8",
      "title": "Debug v8.8",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HBC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HBC"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_HBC"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "BC",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_HBC is OPTIONAL from Armv8.7.",
          "FEAT_HBC is mandatory from Armv8.8.",
          "The following field identifies the presence of FEAT_HBC:",
          " - AArch64-ID_AA64ISAR2_EL1.BC.",
          "For more information, see x[Conditional branch](#CHDIJFDI|C_a64_instruction_set_overview.fm)."
        ],
        "before": "FEAT_HBC provides the x[BC.cond](#A64.instructions.BC_cond|C_a64_base_instruction_descriptions.fm) instruction to give a conditional branch to a label at a PC-relative offset, with a hint that this branch is very unlikely to change direction."
      },
      "name": "FEAT_HBC",
      "title": "Hinted conditional branches",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MOPS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MOPS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MOPS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MOPS",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MOPS is OPTIONAL from Armv8.7.",
          "FEAT_MOPS is mandatory from Armv8.8.",
          "The following field identifies the presence of FEAT_MOPS:",
          " - AArch64-ID_AA64ISAR2_EL1.MOPS.",
          "For more information, see:",
          " - x[Memory Copy and Memory Set instructions](#CEGEGICED1|C_a64_instruction_set_overview.fm).",
          " - x[Memory Copy and Memory Set exceptions](#MDSec.memcpy_and_memset_exceptions|D_the_aarch64_system_level_programmers_model.fm)."
        ],
        "before": [
          "FEAT_MOPS provides instructions that perform a memory copy or memory set, and introduces Memory Copy and Memory Set exceptions.",
          "FEAT_MOPS also introduces the x[HCRX_EL2](#AArch64.hcrx_el2|D_aarch64_system_register_descriptions.fm).{MSCEn, MCE2}, x[SCTLR_EL1](#AArch64.sctlr_el1|D_aarch64_system_register_descriptions.fm).MSCEn, and x[SCTLR_EL2](#AArch64.sctlr_el2|D_aarch64_system_register_descriptions.fm).MSCEn control bits."
        ]
      },
      "name": "FEAT_MOPS",
      "title": "Standardization of memory operations",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_NMI"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_NMI"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_NMI"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "NMI",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_NMI is OPTIONAL from Armv8.7.",
          "FEAT_NMI is mandatory from Armv8.8.",
          "The following field identifies the presence of FEAT_NMI:",
          " - AArch64-ID_AA64PFR1_EL1.NMI.",
          "For more information, see:",
          " - x[Asynchronous exception types](BEICCADH|D_the_aarch64_system_level_programmers_model.fm).",
          " - x[Virtual interrupts](G1BEIBCHBH|G_the_aarch32_system_level_programmers_model.fm).",
          " - x[PSTATE fields that are meaningful in AArch64 state](CHDCFJBEI0|D_the_aarch64_system_level_programmers_model.fm).",
          " - x[WFE wake-up events](CIHHCDHG|G_the_aarch32_system_level_programmers_model.fm)."
        ],
        "before": [
          "FEAT_NMI provides a mechanism to support <i>non-maskable interrupts</i> (NMI) and <i>less-masked interrupts</i> (LMI). In addition to legacy behavior, the feature includes the following:",
          " - A mode for supporting an LMI interrupt mask that is distinct from x[PSTATE](PSTATE|D_the_aarch64_system_level_programmers_model.fm).{I, F}.",
          " - A mode for supporting a limited NMI, where the value when x[PSTATE](PSTATE|D_the_aarch64_system_level_programmers_model.fm).SP is 1 is taken as an interrupt mask for all interrupts targeting that Exception level, and where the LMI interrupt mask can also be used",
          "FEAT_NMI adds:",
          " - The AllIntMask variable.",
          " - An Optional Superpriority attribute to denote virtual and physical IRQ and FIQ interrupts as non-maskable.",
          " - The x[SCTLR_ELx](SCTLR_ELx|appx_registers_index.fm).{NMI, SPINTMASK} control bits.",
          " - The x[PSTATE](PSTATE|D_the_aarch64_system_level_programmers_model.fm).ALLINT bit and associated instructions.",
          " - The x[HCRX_EL2](AArch64.hcrx_el2|D_aarch64_system_register_descriptions.fm).TALLINT bit to enable trapping of ALLINT instructions at EL1."
        ]
      },
      "name": "FEAT_NMI",
      "title": "Non-maskable Interrupts",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap8"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPEv1p3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMSVer",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 4
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPEv1p3 is OPTIONAL from Armv8.7.",
          "In an Armv8.8 implementation, if x[FEAT_SPE](feat:FEAT_SPE) is implemented, FEAT_SPEv1p3 is implemented.",
          "If FEAT_SPEv1p3 is implemented, then x[FEAT_SPEv1p2](feat:FEAT_SPEv1p2) is implemented.",
          "The following field identifies the presence of FEAT_SPEv1p3:",
          " - AArch64-ID_AA64DFR0_EL1.PMSVer.",
          "For more information, see:",
          " - x[Additional information for each profiled memory access operation](#CACCHEJC|D_the_statistical_profiling_extension.fm).",
          " - x[About the Statistical Profiling Extension sample records](#CHDIAFGD|D_statistical_profiling_sample_records.fm).",
          " - x[Address packet](#proto.Address_packet|D_statistical_profiling_sample_records.fm)."
        ],
        "before": [
          "FEAT_SPEv1p3 introduces the following to the Statistical Profiling Extension:",
          " - Support for sampling Tag operations.",
          " - Support for sampling Memory Copy and Set operations."
        ]
      },
      "name": "FEAT_SPEv1p3",
      "title": "Statistical Profiling Extensions version 1.3",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap9"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPEv1p4"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMSVer",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 5
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPEv1p4 is OPTIONAL from Armv8.8.",
          "In an Armv8.9 implementation, if x[FEAT_SPE](feat:FEAT_SPE) is implemented, FEAT_SPEv1p4 is implemented.",
          "If FEAT_SPEv1p4 is implemented, then x[FEAT_SPEv1p3](feat:FEAT_SPEv1p3) is implemented.",
          "The following field identifies the presence of FEAT_SPEv1p4:",
          " - AArch64-ID_AA64DFR0_EL1.PMSVer."
        ],
        "before": [
          "FEAT_SPEv1p4 introduces the following to the Statistical Profiling Extension:",
          " - Additions to the x[Events packet](#proto.Events_packet|D_statistical_profiling_sample_records.fm) to provide more information about the data source.",
          " - Additional event-based record filtering control bits in x[PMSEVFR_EL1](#AArch64.pmsevfr_el1|D_aarch64_system_register_descriptions.fm) and x[PMSNEVFR_EL1](#AArch64.pmsnevfr_el1|D_aarch64_system_register_descriptions.fm) that add the ability to filter by additional existing bits in the Events packet."
        ]
      },
      "name": "FEAT_SPEv1p4",
      "title": "Statistical Profiling Extension version 1.4",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_FDS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap9"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_LDS"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_FDS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_FDS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_LDS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_FDS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_FDS"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_FDS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FDS",
                      "instance": null,
                      "name": "PMSIDR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPE_FDS is OPTIONAL from Armv8.8.",
          "In an Armv8.9 implementation, if x[FEAT_SPE_LDS](feat:FEAT_SPE_LDS) is implemented, FEAT_SPE_FDS is implemented.",
          "If FEAT_SPE_FDS is implemented, then x[FEAT_SPE_LDS](feat:FEAT_SPE_LDS) is implemented.",
          "If FEAT_SPE_FDS is implemented, then x[FEAT_SPEv1p4](feat:FEAT_SPEv1p4) is implemented.",
          "When FEAT_SPE_FDS and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_FGT2](feat:FEAT_FGT2) is implemented.",
          "The following field identifies the presence of FEAT_SPE_FDS:",
          " - AArch64-PMSIDR_EL1.FDS.",
          "For more information, see x[Filtering sample records](#CHDBDDDI|D_the_statistical_profiling_extension.fm)."
        ],
        "before": "FEAT_SPE_FDS provides the capability to filter sample records by all or part of the sampled x[Data Source packet](#proto.Data_Source_packet|D_statistical_profiling_sample_records.fm)."
      },
      "name": "FEAT_SPE_FDS",
      "title": "Statistical Profiling data source filtering",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TIDCP1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TIDCP1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TIDCP1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TIDCP1",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature introduces controls only in AArch64 state, and controls IMPLEMENTATION DEFINED execution at EL0 in both AArch32 and AArch64 states.",
          "FEAT_TIDCP1 is OPTIONAL from Armv8.7.",
          "FEAT_TIDCP1 is mandatory from Armv8.8.",
          "The following field identifies the presence of FEAT_TIDCP1:",
          " - AArch64-ID_AA64MMFR1_EL1.TIDCP1.",
          "For more information, see x[Prioritization of Synchronous exceptions taken to AArch64 state](#MDSec.prioritization_of_synchronous_exceptions_taken_to_aarch64_state|D_the_aarch64_system_level_programmers_model.fm) "
        ],
        "before": "FEAT_TIDCP1 introduces a control at EL1 and EL2 to enable trapping of EL0 accesses to registers that might control IMPLEMENTATION DEFINED functions."
      },
      "name": "FEAT_TIDCP1",
      "title": "EL0 use of IMPLEMENTATION DEFINED functionality",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_TH"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_TH"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_TH"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "THWIDTH",
                      "instance": null,
                      "name": "PMMIR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_TH"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "THWIDTH",
                      "instance": null,
                      "name": "PMMIR",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_TH"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "AST.DotAtom",
                    "values": [
                      {
                        "_type": "AST.Identifier",
                        "value": "PMU"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "PMMIR"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "THWIDTH"
                      }
                    ]
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states. The threshold condition controls are accessible only in AArch64 state. However, threshold conditions still apply in AArch32 state.",
          "FEAT_PMUv3_TH is OPTIONAL from Armv8.7.",
          "If FEAT_PMUv3_TH is implemented, then x[FEAT_PMUv3](feat:FEAT_PMUv3) is implemented.",
          "The following fields identify the presence of FEAT_PMUv3_TH:",
          " - AArch64-PMMIR_EL1.THWIDTH.",
          " - AArch32-PMMIR.THWIDTH.",
          " - PMMIR.THWIDTH.",
          "For more information, see x[Event threshold and edge counting](#CACBGFJEG4|D_the_performance_monitors_extension.fm)."
        ],
        "before": "FEAT_PMUv3_TH introduces threshold condition controls to each x[PMEVTYPER&lt;n&gt;_EL0](#AArch64.pmevtypern_el0|D_aarch64_system_register_descriptions.fm) register. This feature permits the counter to count only when x[PMEVTYPER&lt;n&gt;](#CIHHCAEC|appx_registers_index.fm).{MT, evtCount} describe an event whose count meets a specified threshold condition."
      },
      "name": "FEAT_PMUv3_TH",
      "title": "Event counting threshold",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EDGE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EDGE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_TH"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EDGE"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "EDGE",
                    "instance": null,
                    "name": "PMMIR_EL1",
                    "slices": null,
                    "state": "AArch64"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 1
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EDGE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "EDGE",
                      "instance": null,
                      "name": "PMMIR",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EDGE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "AST.DotAtom",
                    "values": [
                      {
                        "_type": "AST.Identifier",
                        "value": "PMU"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "PMMIR"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "EDGE"
                      }
                    ]
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_PMUv3_EDGE is OPTIONAL from Armv8.8.",
          "If FEAT_PMUv3_EDGE is implemented, then x[FEAT_PMUv3_TH](feat:FEAT_PMUv3_TH) is implemented.",
          "The following fields identify the presence of FEAT_PMUv3_EDGE:",
          " - AArch64-PMMIR_EL1.EDGE.",
          " - AArch32-PMMIR.EDGE.",
          " - PMMIR.EDGE.",
          "For more information, see x[Event threshold and edge counting](#CACBGFJEG4|D_the_performance_monitors_extension.fm)."
        ],
        "before": "FEAT_PMUv3_EDGE introduces edge-detection logic to support counting threshold crossing events."
      },
      "name": "FEAT_PMUv3_EDGE",
      "title": "PMU event edge detection",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap8"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p7"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p8"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PMUVer",
                        "instance": null,
                        "name": "ID_AA64DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 8
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PMUVer",
                        "instance": null,
                        "name": "ID_AA64DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p8"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 8
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p8"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0",
                        "slices": null,
                        "state": "AArch32"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 8
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0",
                        "slices": null,
                        "state": "AArch32"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p8"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMUVer",
                      "instance": null,
                      "name": "EDDFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 8
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMUVer",
                      "instance": null,
                      "name": "EDDFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "<",
              "right": {
                "_type": "AST.Integer",
                "value": 15
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_PMUv3p8 is OPTIONAL from Armv8.7.",
          "In an Armv8.8 implementation, if x[FEAT_PMUv3](feat:FEAT_PMUv3) is implemented, FEAT_PMUv3p8 is implemented.",
          "If FEAT_PMUv3p8 is implemented, then x[FEAT_PMUv3p7](feat:FEAT_PMUv3p7) is implemented.",
          "The following fields identify the presence of FEAT_PMUv3p8:",
          " - AArch64-ID_AA64DFR0_EL1.PMUVer.",
          " - AArch64-ID_DFR0_EL1.PerfMon.",
          " - AArch32-ID_DFR0.PerfMon.",
          " - ext-EDDFR.PMUVer.",
          "For more information, see [PMU Event Descriptions](#chap.event_descriptions)."
        ],
        "before": [
          "FEAT_PMUv3p8 introduces the following to the Performance Monitors Extension:",
          " - The Common event number space is extended to include the ranges 0x0040-0x00BF and 0x4040-0x40BF.",
          " - For an event counter n, if any reserved or unimplemented PMU event number is written to x[PMEVTYPER&lt;n&gt;](#CIHHCAEC|appx_registers_index.fm).evtCount, then event counter n does not count, and a read of x[PMEVTYPER&lt;n&gt;](#CIHHCAEC|appx_registers_index.fm).evtCount returns the value written."
        ]
      },
      "name": "FEAT_PMUv3p8",
      "title": "Armv8.8 PMU extensions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HCX"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap7"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HCX"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_HCX"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_HCX"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "HCX",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_HCX is OPTIONAL from Armv8.6.",
          "In an Armv8.7 implementation, if x[FEAT_AA64EL2](feat:FEAT_AA64EL2) is implemented, FEAT_HCX is implemented.",
          "When x[FEAT_AA64](feat:FEAT_AA64) and FEAT_HCX are implemented, x[FEAT_AA64EL2](feat:FEAT_AA64EL2) is implemented.",
          "The following field identifies the presence of FEAT_HCX:",
          " - AArch64-ID_AA64MMFR1_EL1.HCX.",
          "For more information, see x[Configurable instruction controls](#D1BABHDFHD|D_the_aarch64_system_level_programmers_model.fm)."
        ],
        "before": "FEAT_HCX introduces the Extended Hypervisor Configuration Register, x[HCRX_EL2](AArch64.hcrx_el2|D_aarch64_system_register_descriptions.fm), that provides configuration controls for virtualization in addition to those provided by x[HCR_EL2](AArch64.hcr_el2|D_aarch64_system_register_descriptions.fm), including defining whether various operations are trapped to EL2."
      },
      "name": "FEAT_HCX",
      "title": "Support for the HCRX_EL2 register",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAN3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAN3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAN3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAN2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PAN3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PAN",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_PAN3 is OPTIONAL from Armv8.1.",
          "FEAT_PAN3 is mandatory from Armv8.7.",
          "If FEAT_PAN3 is implemented, then x[FEAT_PAN2](feat:FEAT_PAN2) is implemented.",
          "The following field identifies the presence of FEAT_PAN3:",
          " - AArch64-ID_AA64MMFR1_EL1.PAN.",
          "For more information, see x[PSTATE PAN](#MDSec.PSTATE_PAN|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_PAN3 introduces a bit to x[SCTLR_EL1](#AArch64.sctlr_el1|D_aarch64_system_register_descriptions.fm) and x[SCTLR_EL2](#AArch64.sctlr_el2|D_aarch64_system_register_descriptions.fm), EPAN, to support using Privileged Access Never with instruction accesses for stage 1 translation regimes."
      },
      "name": "FEAT_PAN3",
      "title": "Support for SCTLR_ELx.EPAN",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_WFxT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_WFxT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_WFxT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "WFxT",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "These instructions are added to the A64 instruction set only.",
          "FEAT_WFxT is OPTIONAL from Armv8.6.",
          "FEAT_WFxT is mandatory from Armv8.7.",
          "The following field identifies the presence of FEAT_WFxT:",
          " - AArch64-ID_AA64ISAR2_EL1.WFxT.",
          "For more information, see:",
          " - [Wait for Event](#BEIJHBBD).",
          " - [Wait for Interrupt mechanism](#BEIJBEJD)."
        ],
        "before": "FEAT_WFxT introduces x[WFET](A64.instructions.WFET|C_a64_base_instruction_descriptions.fm) and x[WFIT](A64.instructions.WFIT|C_a64_base_instruction_descriptions.fm). These instructions support the generation of a local timeout event to act as a wake-up event for the PE when the virtual count in x[CNTVCT_EL0](AArch64.cntvct_el0|D_aarch64_system_register_descriptions.fm) equals or exceeds the value supplied by the instruction for the first time."
      },
      "name": "FEAT_WFxT",
      "title": "WFE and WFI instructions with timeout",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_XS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_XS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_XS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "XS",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only, but the XS attribute also impacts AArch32 state execution.",
          "FEAT_XS is OPTIONAL from Armv8.6.",
          "FEAT_XS is mandatory from Armv8.7.",
          "The following field identifies the presence of FEAT_XS:",
          " - AArch64-ID_AA64ISAR1_EL1.XS.",
          "For more information, see:",
          " - x[Data Synchronization Barrier (DSB)](#BEICEFJH|B_the_aarch64_application_level_memory_model.fm).",
          " - x[Behavior when stage 1 address translation is disabled](#MDSec.Behavior_when_stage_1_address_translation_is_disabled|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Block descriptor and Page descriptor formats](#MDSec.Block_descriptor_and_page_descriptor_formats|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Stage 1 memory type and Cacheability attributes](#MDSec.Stage_1_memory_type_and_Cacheability_attributes|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[XS attribute modifier](#MDSec.XS_attribute_modifier|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Overview of memory region attributes for stage 1 translations](#CHDDHFIG|G_the_aarch32_virtual_memory_system_architecture.fm).",
          " - x[Ordering and completion of TLB maintenance instructions](#BEIJIGCG|G_the_aarch32_virtual_memory_system_architecture.fm)."
        ],
        "before": [
          "FEAT_XS introduces the XS attribute for memory to indicate that an access could take a long time to complete. This feature provides variants of DSB instructions and TLB maintenance instructions, the completion of which does not depend on the completion of memory accesses with the XS attribute.",
          "FEAT_XS adds:",
          " - A mechanism to define the XS attribute for memory.",
          " - An optional nXS variant to the AArch64 DSB instruction and OPTIONAL nXS qualifier to each AArch64 TLBI instruction to handle memory accesses with the XS attribute.",
          " - The x[HCRX_EL2](AArch64.hcrx_el2|D_aarch64_system_register_descriptions.fm).FGTnXS bit to determine the behavior of fine-grained traps in x[HFGITR_EL2](AArch64.hfgitr_el2|D_aarch64_system_register_descriptions.fm) for TLB maintenance instructions with the nXS qualifier.",
          " - The x[HCRX_EL2](AArch64.hcrx_el2|D_aarch64_system_register_descriptions.fm).FnXS bit to determine the behavior of pre-existing TLB maintenance instructions in relation to the XS attribute."
        ]
      },
      "name": "FEAT_XS",
      "title": "XS attribute",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AFP"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap7"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AFP"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AFP"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AFP"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AFP",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_AFP is OPTIONAL from Armv8.6.",
          "In an Armv8.7 implementation, if x[FEAT_FP](feat:FEAT_FP) is implemented, FEAT_AFP is implemented.",
          "If FEAT_AFP is implemented, then x[FEAT_FP](feat:FEAT_FP) is implemented.",
          "The following field identifies the presence of FEAT_AFP:",
          " - AArch64-ID_AA64MMFR1_EL1.AFP.",
          "For more information, see:",
          " - x[Flushing denormalized numbers to zero](#Chdbdeij|A_introduction_to_the_armv8_architecture.fm).",
          " - x[NaN handling and the Default NaN](#Bhbhiehj|A_introduction_to_the_armv8_architecture.fm).",
          " - x[Rounding](#BABDGEAD|A_introduction_to_the_armv8_architecture.fm).",
          " - x[Floating-point exceptions and exception traps](#BEIJDDAG|A_introduction_to_the_armv8_architecture.fm)."
        ],
        "before": [
          "FEAT_AFP allows alternate behavior for specified floating-point instructions including:",
          " - Flushing of denormalized numbers to zero can be controlled separately on inputs and outputs.",
          " - Alternate NaN propagation rules and Default NaN values can apply.",
          " - Certain scalar SIMD and floating-point instructions can be configured to preserve higher numbered SIMD vector elements.",
          " - Changes to floating-point exception generation."
        ]
      },
      "name": "FEAT_AFP",
      "title": "Alternate floating-point behavior",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RPRES"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RPRES"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AFP"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RPRES"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RPRES",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_RPRES is OPTIONAL from Armv8.6.",
          "If FEAT_RPRES is implemented, then x[FEAT_AFP](feat:FEAT_AFP) is implemented.",
          "The following field identifies the presence of FEAT_RPRES:",
          " - AArch64-ID_AA64ISAR2_EL1.RPRES.",
          "For more information, see `RecipEstimate()` and `RecipSqrtEstimate()`."
        ],
        "before": "FEAT_RPRES allows an increase in the precision of the single-precision floating-point reciprocal estimate and reciprocal square root estimate from an 8-bit mantissa to a 12-bit mantissa."
      },
      "name": "FEAT_RPRES",
      "title": "Increased precision of FRECPE and FRSQRTE",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LPA2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LPA2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LVA"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_S2TGran4K"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TGran4_2",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            },
            "op": "==>",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_LPA2"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_S2TGran16K"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TGran16_2",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            },
            "op": "==>",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_LPA2"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_TGran4K"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TGran4",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "SInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            },
            "op": "==>",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_LPA2"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_TGran16K"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TGran16",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            },
            "op": "==>",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_LPA2"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_LPA2 is OPTIONAL from Armv8.6.",
          "If FEAT_LPA2 is implemented, then x[FEAT_LVA](feat:FEAT_LVA) is implemented.",
          "The following fields identify the presence of FEAT_LPA2:",
          " - AArch64-ID_AA64MMFR0_EL1.TGran4_2.",
          " - AArch64-ID_AA64MMFR0_EL1.TGran16_2.",
          " - AArch64-ID_AA64MMFR0_EL1.TGran4.",
          " - AArch64-ID_AA64MMFR0_EL1.TGran16.",
          "For more information, see:",
          " - x[Implemented physical address size](#MDSec.Implemented_physical_address_size|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Output address size configuration](#MDSec.Output_address_size_configuration|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Supported virtual address ranges](#MDSec.Supported_virtual_address_ranges|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Input address size configuration](#MDSec.Input_address_size_configuration|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Intermediate physical address size configuration](#MDSec.Intermediate_physical_address_size_configuration|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Translation using the 4KB granule](#MDSec.Translation_using_the_4KB_granule|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Translation using the 16KB granule](#MDSec.Translation_using_the_16KB_granule|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Table descriptor format](#MDSec.Table_descriptor_format|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Block descriptor and Page descriptor formats](#MDSec.Block_descriptor_and_page_descriptor_formats|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": [
          "FEAT_LPA2:",
          " - Allows a larger VA space for each translation table base register of up to 52 bits when using the 4KB or 16KB translation granules.",
          " - Allows a larger intermediate physical address (IPA) and PA space of up to 52 bits when using the 4KB or 16KB translation granules.",
          " - Allows a level 0 block size where the block covers a 512GB address range for the 4KB translation granule if the implementation supports 52 bits of PA.",
          " - Allows a level 1 block size where the block covers a 64GB address range for the 16KB translation granule if the implementation supports 52 bits of PA."
        ]
      },
      "name": "FEAT_LPA2",
      "title": "Larger physical address for 4KB and 16KB translation granules",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LS64"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LS64"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LS64",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_LS64 is OPTIONAL from Armv8.6.",
          "The following field identifies the presence of FEAT_LS64:",
          " - AArch64-ID_AA64ISAR1_EL1.LS64.",
          "For more information, see x[Single-copy atomic 64-byte load/store](#CJACAFAH|C_a64_instruction_set_overview.fm)."
        ],
        "before": [
          "FEAT_LS64 introduces support for single-copy atomic 64-byte loads and stores without status result. For more information, see:",
          " - x[LD64B](#A64.instructions.LD64B|C_a64_base_instruction_descriptions.fm).",
          " - x[ST64B](#A64.instructions.ST64B|C_a64_base_instruction_descriptions.fm)."
        ]
      },
      "name": "FEAT_LS64",
      "title": "Support for 64-byte loads and stores without status",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LS64_V"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LS64_V"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LS64"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LS64_V"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LS64",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_LS64_V is OPTIONAL from Armv8.6.",
          "If FEAT_LS64_V is implemented, then x[FEAT_LS64](feat:FEAT_LS64) is implemented.",
          "The following field identifies the presence of FEAT_LS64_V:",
          " - AArch64-ID_AA64ISAR1_EL1.LS64.",
          "For more information, see x[Single-copy atomic 64-byte load/store](#CJACAFAH|C_a64_instruction_set_overview.fm)."
        ],
        "before": [
          "FEAT_LS64_V introduces support for single-copy atomic 64-byte stores with status result. For more information, see:",
          " - x[ST64BV](#A64.instructions.ST64BV|C_a64_base_instruction_descriptions.fm).",
          "[note]The meaning of any status being returned by the x[ST64BV](#A64.instructions.ST64BV|C_a64_base_instruction_descriptions.fm) instruction is defined by the peripheral providing the response.[/note]"
        ]
      },
      "name": "FEAT_LS64_V",
      "title": "Support for 64-byte stores with status",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LS64_ACCDATA"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LS64_ACCDATA"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LS64_V"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LS64_ACCDATA"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LS64",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_LS64_ACCDATA is OPTIONAL from Armv8.6.",
          "If FEAT_LS64_ACCDATA is implemented, then x[FEAT_LS64_V](feat:FEAT_LS64_V) is implemented.",
          "The following field identifies the presence of FEAT_LS64_ACCDATA:",
          " - AArch64-ID_AA64ISAR1_EL1.LS64.",
          "For more information, see x[Single-copy atomic 64-byte load/store](#CJACAFAH|C_a64_instruction_set_overview.fm)."
        ],
        "before": [
          "FEAT_LS64_ACCDATA introduces support for single-copy atomic 64-byte EL0 stores with status result. For more information, see:",
          " - x[ST64BV0](#A64.instructions.ST64BV0|C_a64_base_instruction_descriptions.fm).",
          " - x[ACCDATA_EL1](#AArch64.accdata_el1|D_aarch64_system_register_descriptions.fm).",
          "[note]The meaning of any status being returned by the x[ST64BV0](#A64.instructions.ST64BV0|C_a64_base_instruction_descriptions.fm) instruction is defined by the peripheral providing the response.[/note]"
        ]
      },
      "name": "FEAT_LS64_ACCDATA",
      "title": "Support for 64-byte EL0 stores with status",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LS64WB"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LS64WB"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LS64_ACCDATA"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LS64WB"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LS64",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 4
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_LS64WB is OPTIONAL from Armv9.2.",
          "If FEAT_LS64WB is implemented, then x[FEAT_LS64_ACCDATA](feat:FEAT_LS64_ACCDATA) is implemented.",
          "The following field identifies the presence of FEAT_LS64WB:",
          " - AArch64-ID_AA64ISAR1_EL1.LS64."
        ],
        "before": "FEAT_LS64WB provides support for large single-copy atomic load and store instructions for accesses to Conventional memory to enable scalability of atomic message passing without relying on separate flag and data accesses."
      },
      "name": "FEAT_LS64WB",
      "title": "LS64 for Write-back cacheable memory",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap7"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTE_ASYNC"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTE3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MTE",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MTE3 is OPTIONAL from Armv8.5.",
          "In an Armv8.7 implementation, if x[FEAT_MTE_ASYNC](feat:FEAT_MTE_ASYNC) is implemented, FEAT_MTE3 is implemented.",
          "If FEAT_MTE3 is implemented, then x[FEAT_MTE2](feat:FEAT_MTE2) is implemented.",
          "The following field identifies the presence of FEAT_MTE3:",
          " - AArch64-ID_AA64PFR1_EL1.MTE.",
          "For more information, see x[The Memory Tagging Extension](#CACJAEHE|D_the_memory_tagging_extension.fm)."
        ],
        "before": "FEAT_MTE3 introduces support for asymmetric Tag Check Fault handling."
      },
      "name": "FEAT_MTE3",
      "title": "MTE Asymmetric Fault Handling",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE_ASYM_FAULT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE_ASYM_FAULT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap9"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTE_ASYM_FAULT"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE_ASYNC"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTE_ASYM_FAULT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MTE",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MTE_ASYM_FAULT is OPTIONAL.",
          "If x[FEAT_MTE3](feat:FEAT_MTE3) is implemented, then FEAT_MTE_ASYM_FAULT is implemented.",
          "If FEAT_MTE_ASYM_FAULT is implemented, then x[FEAT_MTE3](feat:FEAT_MTE3) is implemented.",
          "In an Armv8.9 implementation, if FEAT_MTE_ASYM_FAULT is implemented, x[FEAT_MTE_ASYNC](feat:FEAT_MTE_ASYNC) is implemented.",
          "The following field identifies the presence of FEAT_MTE_ASYM_FAULT:",
          " - AArch64-ID_AA64PFR1_EL1.MTE."
        ],
        "before": "FEAT_MTE_ASYM_FAULT introduces support for asymmetric MTE Tag Check fault handling."
      },
      "name": "FEAT_MTE_ASYM_FAULT",
      "title": "Memory tagging asymmetric faults",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap7"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPEv1p2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMSVer",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPEv1p2 is OPTIONAL from Armv8.6.",
          "In an Armv8.7 implementation, if x[FEAT_SPE](feat:FEAT_SPE) is implemented, FEAT_SPEv1p2 is implemented.",
          "If FEAT_SPEv1p2 is implemented, then x[FEAT_SPEv1p1](feat:FEAT_SPEv1p1) is implemented.",
          "The following field identifies the presence of FEAT_SPEv1p2:",
          " - AArch64-ID_AA64DFR0_EL1.PMSVer.",
          "For more information, see:",
          " - x[Freezing event counters](#CACFAAII|D_the_performance_monitors_extension.fm).",
          " - x[Discard mode](#discard_mode|D_the_statistical_profiling_extension.fm)."
        ],
        "before": [
          "FEAT_SPEv1p2 introduces the following to the Statistical Profiling Extension:",
          " - Controls to freeze the PMU event counters after an SPE buffer management event occurs.",
          " - A discard mode that allows all SPE data to be discarded rather than written to memory."
        ]
      },
      "name": "FEAT_SPEv1p2",
      "title": "Statistical Profiling Extensions version 1.2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_FnE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_FnE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_FnE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FnE",
                      "instance": null,
                      "name": "PMSIDR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPE_FnE is OPTIONAL.",
          "If FEAT_SPE_FnE is implemented, then x[FEAT_SPEv1p2](feat:FEAT_SPEv1p2) is implemented.",
          "If x[FEAT_SPEv1p2](feat:FEAT_SPEv1p2) is implemented, then FEAT_SPE_FnE is implemented.",
          "The following field identifies the presence of FEAT_SPE_FnE:",
          " - AArch64-PMSIDR_EL1.FnE.",
          "For more information, see x[Filtering sample records](#CHDBDDDI|D_the_statistical_profiling_extension.fm)."
        ],
        "before": "FEAT_SPE_FnE provides the capability to filter sample records by the inverse value of bits in the sampled x[Events packet](#proto.Events_packet|D_statistical_profiling_sample_records.fm)."
      },
      "name": "FEAT_SPE_FnE",
      "title": "Statistical Profiling inverse event filter",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_PBT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_PBT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PBT",
                      "instance": null,
                      "name": "PMSIDR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPE_PBT is OPTIONAL.",
          "If FEAT_SPE_PBT is implemented, then x[FEAT_SPEv1p2](feat:FEAT_SPEv1p2) is implemented.",
          "The following field identifies the presence of FEAT_SPE_PBT:",
          " - AArch64-PMSIDR_EL1.PBT.",
          "For more information, see:",
          " - x[Previous branch target](#BABGHCJH|D_the_statistical_profiling_extension.fm).",
          " - x[Address packet](#proto.Address_packet|D_statistical_profiling_sample_records.fm)."
        ],
        "before": "FEAT_SPE_PBT provides support for generating a packet that provides the target address for the previous taken branch."
      },
      "name": "FEAT_SPE_PBT",
      "title": "Statistical Profiling previous branch target",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p7"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap7"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p7"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p7"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p7"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PMUVer",
                        "instance": null,
                        "name": "ID_AA64DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 7
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PMUVer",
                        "instance": null,
                        "name": "ID_AA64DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p7"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 7
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p7"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0",
                        "slices": null,
                        "state": "AArch32"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 7
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0",
                        "slices": null,
                        "state": "AArch32"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p7"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMUVer",
                      "instance": null,
                      "name": "EDDFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 7
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMUVer",
                      "instance": null,
                      "name": "EDDFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "<",
              "right": {
                "_type": "AST.Integer",
                "value": 15
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p7"
            },
            "op": "==>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "AST.DotAtom",
                    "values": [
                      {
                        "_type": "AST.Identifier",
                        "value": "PMU"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "PMCFGR"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "FZO"
                      }
                    ]
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_PMUv3p7 is OPTIONAL from Armv8.6.",
          "In an Armv8.7 implementation, if x[FEAT_PMUv3](feat:FEAT_PMUv3) is implemented, FEAT_PMUv3p7 is implemented.",
          "If FEAT_PMUv3p7 is implemented, then x[FEAT_PMUv3p5](feat:FEAT_PMUv3p5) is implemented.",
          "The following fields identify the presence of FEAT_PMUv3p7:",
          " - AArch64-ID_AA64DFR0_EL1.PMUVer.",
          " - AArch64-ID_DFR0_EL1.PerfMon.",
          " - AArch32-ID_DFR0.PerfMon.",
          " - ext-EDDFR.PMUVer.",
          " - PMCFGR.FZO.",
          "For more information, see:",
          " - x[Controlling the PMU counters](#Cihidfee|D_the_performance_monitors_extension.fm).",
          " - x[Freezing event counters](#CACFAAII|D_the_performance_monitors_extension.fm)."
        ],
        "before": [
          "FEAT_PMUv3p7 introduces the following to the Performance Monitors Extension:",
          " - PMU counters can be frozen when an event counter has an unsigned overflow.",
          " - Event counters can be prohibited from counting events at EL3 without affecting other Exception levels in Secure state.",
          " - The cycle counter can be prohibited from counting cycles at EL3 without affecting other Exception levels in Secure state."
        ]
      },
      "name": "FEAT_PMUv3p7",
      "title": "Armv8.7 PMU extensions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_D128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_D128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SYSREG128"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_D128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SYSINSTR128"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_D128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LSE128"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_D128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_S1PIE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_D128"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2PIE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_D128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AIE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_D128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TCR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_D128"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "D128",
                      "instance": null,
                      "name": "ID_AA64MMFR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_D128 is OPTIONAL from Armv9.3.",
          "If FEAT_D128 is implemented, then x[FEAT_SYSREG128](feat:FEAT_SYSREG128) is implemented.",
          "If FEAT_D128 is implemented, then x[FEAT_SYSINSTR128](feat:FEAT_SYSINSTR128) is implemented.",
          "If FEAT_D128 is implemented, then x[FEAT_LSE128](feat:FEAT_LSE128) is implemented.",
          "If FEAT_D128 is implemented, then x[FEAT_S1PIE](feat:FEAT_S1PIE) is implemented.",
          "When FEAT_D128 and x[FEAT_EL2](feat:FEAT_EL2) are implemented, x[FEAT_S2PIE](feat:FEAT_S2PIE) is implemented.",
          "If FEAT_D128 is implemented, then x[FEAT_AIE](feat:FEAT_AIE) is implemented.",
          "If FEAT_D128 is implemented, then x[FEAT_TCR2](feat:FEAT_TCR2) is implemented.",
          "The following field identifies the presence of FEAT_D128:",
          " - AArch64-ID_AA64MMFR3_EL1.D128.",
          "For more information, see x[The AArch64 Virtual Memory System Architecture](#CACIIIJC|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": [
          "FEAT_D128 introduces support for the VMSAv9-128 translation system, comprising the following:",
          " - 128-bit translation table descriptors.",
          " - Support for encoding up to 56-bit physical addresses in translation table descriptors.",
          " - If x[FEAT_LVA](FEAT_LVA|A_armv8_architecture_extensions.fm) or x[FEAT_LVA3](FEAT_LVA3|A_armv8_architecture_extensions.fm) are implemented, support for translating up to 56-bit virtual addresses.",
          " - TLBIP VA*, TLBIP RVA*, TLBIP IPA*, TLBIP RIPA* instructions that can take 128-bit inputs."
        ]
      },
      "name": "FEAT_D128",
      "title": "128-bit Translation Tables, 56 bit PA",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AIE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AIE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TCR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AIE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HPDS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AIE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AIE",
                      "instance": null,
                      "name": "ID_AA64MMFR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_AIE is OPTIONAL from Armv8.8.",
          "If FEAT_AIE is implemented, then x[FEAT_TCR2](feat:FEAT_TCR2) is implemented.",
          "If FEAT_AIE is implemented, then x[FEAT_HPDS](feat:FEAT_HPDS) is implemented.",
          "The following field identifies the presence of FEAT_AIE:",
          " - AArch64-ID_AA64MMFR3_EL1.AIE.",
          "For more information, see x[Stage 1 memory type and Cacheability attributes](MDSec.Stage_1_memory_type_and_Cacheability_attributes|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_AIE increases the stage 1 descriptor attribute index bit width from 3 to 4, allowing use of up to 16 memory attributes."
      },
      "name": "FEAT_AIE",
      "title": "Memory Attribute Index Enhancement",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S1PIE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S1PIE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ATS1A"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S1PIE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TCR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_S1PIE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "S1PIE",
                      "instance": null,
                      "name": "ID_AA64MMFR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_S1PIE is OPTIONAL from Armv8.8.",
          "If FEAT_S1PIE is implemented, then x[FEAT_ATS1A](feat:FEAT_ATS1A) is implemented.",
          "If FEAT_S1PIE is implemented, then x[FEAT_TCR2](feat:FEAT_TCR2) is implemented.",
          "The following field identifies the presence of FEAT_S1PIE:",
          " - AArch64-ID_AA64MMFR3_EL1.S1PIE.",
          "For more information, see x[Stage 1 Indirect permissions](#MDSec.Stage_1_Indirect_permissions|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_S1PIE introduces a way to set stage 1 permissions that allows more efficient use of the permission bits in translation table descriptors and provides the ability to introduce additional permission types."
      },
      "name": "FEAT_S1PIE",
      "title": "Stage 1 permission indirections",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ATS1A"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ATS1A"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ATS1A",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "These instructions are added to the A64 instruction set only.",
          "FEAT_ATS1A is OPTIONAL from Armv8.8.",
          "The following field identifies the presence of FEAT_ATS1A:",
          " - AArch64-ID_AA64ISAR2_EL1.ATS1A."
        ],
        "before": "FEAT_ATS1A introduces instructions that provide the output address and attributes of a valid translation without checking for stage 1 permissions."
      },
      "name": "FEAT_ATS1A",
      "title": "Address Translation operations that ignore stage 1 permissions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S1POE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S1POE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TCR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S1POE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ATS1A"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S1POE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HPDS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_S1POE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "S1POE",
                      "instance": null,
                      "name": "ID_AA64MMFR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_S1POE is OPTIONAL from Armv8.8.",
          "If FEAT_S1POE is implemented, then x[FEAT_TCR2](feat:FEAT_TCR2) is implemented.",
          "If FEAT_S1POE is implemented, then x[FEAT_ATS1A](feat:FEAT_ATS1A) is implemented.",
          "If FEAT_S1POE is implemented, then x[FEAT_HPDS](feat:FEAT_HPDS) is implemented.",
          "The following field identifies the presence of FEAT_S1POE:",
          " - AArch64-ID_AA64MMFR3_EL1.S1POE.",
          "For more information, see x[Stage 1 Overlay permissions](#MDSec.Stage_1_Overlay_permissions|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_S1POE allows stage 1 permissions to be progressively restricted without requiring TLB maintenance. The feature is available at all Exception levels, including EL0, and can reduce the number of calls to privileged software."
      },
      "name": "FEAT_S1POE",
      "title": "Stage 1 permission overlays",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2PIE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2PIE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_S2PIE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "S2PIE",
                      "instance": null,
                      "name": "ID_AA64MMFR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_S2PIE is OPTIONAL from Armv8.8.",
          "If FEAT_S2PIE is implemented, then x[FEAT_EL2](feat:FEAT_EL2) is implemented.",
          "The following field identifies the presence of FEAT_S2PIE:",
          " - AArch64-ID_AA64MMFR3_EL1.S2PIE.",
          "For more information, see x[Stage 2 Indirect permissions](#MDSec.Stage_2_Indirect_permissions|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": [
          "FEAT_S2PIE introduces all of the following:",
          " - A method to set stage 2 permissions that allows more efficient use of the permission bits in translation table descriptors and provides the ability to introduce additional permission types.",
          " - The Mostly Read Only (MRO) permission in stage 2 translations."
        ]
      },
      "name": "FEAT_S2PIE",
      "title": "Stage 2 permission indirections",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2POE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2POE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2POE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2PIE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_S2POE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "S2POE",
                      "instance": null,
                      "name": "ID_AA64MMFR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_S2POE is OPTIONAL from Armv8.8.",
          "If FEAT_S2POE is implemented, then x[FEAT_EL2](feat:FEAT_EL2) is implemented.",
          "If FEAT_S2POE is implemented, then x[FEAT_S2PIE](feat:FEAT_S2PIE) is implemented.",
          "The following field identifies the presence of FEAT_S2POE:",
          " - AArch64-ID_AA64MMFR3_EL1.S2POE.",
          "For more information, see x[Stage 2 Overlay permissions](#MDSec.Stage_2_Overlay_permissions|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_S2POE provides a mechanism for stage 2 permissions to be progressively restricted, such that different EL1&0 contexts that are using the same stage 2 translation tables can be provided with different sets of permissions."
      },
      "name": "FEAT_S2POE",
      "title": "Stage 2 permission overlays",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SCTLR2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap9"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SCTLR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SCTLR2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HCX"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SCTLR2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SCTLRX",
                      "instance": null,
                      "name": "ID_AA64MMFR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SCTLR2 is OPTIONAL from Armv8.0.",
          "FEAT_SCTLR2 is mandatory from Armv8.9.",
          "When FEAT_SCTLR2 and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_HCX](feat:FEAT_HCX) is implemented.",
          "The following field identifies the presence of FEAT_SCTLR2:",
          " - AArch64-ID_AA64MMFR3_EL1.SCTLRX."
        ],
        "before": "FEAT_SCTLR2 introduces the x[SCTLR2_ELx](#SCTLR2_ELx|appx_registers_index.fm) registers, which provide top-level control of the system, including its memory system. These registers are extensions of the corresponding x[SCTLR_ELx](#SCTLR_ELx|appx_registers_index.fm) registers."
      },
      "name": "FEAT_SCTLR2",
      "title": "Extension to SCTLR_ELx",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SYSREG128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SYSREG128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SCTLR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SYSREG128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_D128"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SYSREG128"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SYSREG_128",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SYSREG128 is OPTIONAL from Armv9.3.",
          "If FEAT_SYSREG128 is implemented, then x[FEAT_SCTLR2](feat:FEAT_SCTLR2) is implemented.",
          "If FEAT_SYSREG128 is implemented, then x[FEAT_D128](feat:FEAT_D128) is implemented.",
          "The following field identifies the presence of FEAT_SYSREG128:",
          " - AArch64-ID_AA64ISAR2_EL1.SYSREG_128."
        ],
        "before": [
          "FEAT_SYSREG128 introduces the following support for 128-bit System registers:",
          " - The x[MRRS](#A64.instructions.MRRS|C_a64_base_instruction_descriptions.fm) instruction to move a 128-bit System register into a pair of 64-bit general-purpose registers.",
          " - The x[MSRR](#A64.instructions.MSRR|C_a64_base_instruction_descriptions.fm) instruction to move a pair of 64-bit general-purpose registers to a 128-bit System register.",
          " - 128-bit formats of the following system registers:",
          "  - The Physical Address Register, PAR_EL1.",
          "  - The Read-Check-Write mask registers, x[RCWMASK_EL1](#AArch64.rcwmask_el1|RCWMASK_EL1) and x[RCWSMASK_EL1](#AArch64.rcwsmask_el1|RCWSMASK_EL1).",
          "  - The following translation table base address registers, x[TTBR0_EL1](#AArch64.ttbr0_el1|D_aarch64_system_register_descriptions.fm), x[TTBR0_EL2](#AArch64.ttbr0_el2|D_aarch64_system_register_descriptions.fm), x[TTBR1_EL1](#AArch64.ttbr1_el1|D_aarch64_system_register_descriptions.fm), x[TTBR1_EL2](#AArch64.ttbr1_el2|D_aarch64_system_register_descriptions.fm), x[VTTBR_EL2](#AArch64.vttbr_el2|D_aarch64_system_register_descriptions.fm)."
        ]
      },
      "name": "FEAT_SYSREG128",
      "title": "128-bit System registers",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SYSINSTR128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SYSINSTR128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SCTLR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SYSINSTR128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_D128"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SYSINSTR128"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SYSINSTR_128",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SYSINSTR128 is OPTIONAL from Armv9.3.",
          "If FEAT_SYSINSTR128 is implemented, then x[FEAT_SCTLR2](feat:FEAT_SCTLR2) is implemented.",
          "If FEAT_SYSINSTR128 is implemented, then x[FEAT_D128](feat:FEAT_D128) is implemented.",
          "The following field identifies the presence of FEAT_SYSINSTR128:",
          " - AArch64-ID_AA64ISAR2_EL1.SYSINSTR_128.",
          "For more information, see [The A64 System Instruction Class](#BABEGHDB)."
        ],
        "before": "FEAT_SYSINSTR128 introduces support for IMPLEMENTATION DEFINED System instructions that can take 128-bit inputs."
      },
      "name": "FEAT_SYSINSTR128",
      "title": "128-bit System instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LSE128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LSE128"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LSE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LSE128"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "Atomic",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_LSE128 is OPTIONAL from Armv9.3.",
          "If FEAT_LSE128 is implemented, then x[FEAT_LSE](feat:FEAT_LSE) is implemented.",
          "The following field identifies the presence of FEAT_LSE128:",
          " - AArch64-ID_AA64ISAR0_EL1.Atomic.",
          "For more information, see:",
          " - [Atomic integer memory operations](#atomic_mem_ops).",
          " - [Swap operations](#CEGDGAFD)."
        ],
        "before": "FEAT_LSE128 introduces support for 128-bit atomic instructions."
      },
      "name": "FEAT_LSE128",
      "title": "128-bit Atomics",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TCR2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap9"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TCR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TCR2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HCX"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TCR2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TCRX",
                      "instance": null,
                      "name": "ID_AA64MMFR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_TCR2 is OPTIONAL from Armv8.0.",
          "FEAT_TCR2 is mandatory from Armv8.9.",
          "When FEAT_TCR2 and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_HCX](feat:FEAT_HCX) is implemented.",
          "The following field identifies the presence of FEAT_TCR2:",
          " - AArch64-ID_AA64MMFR3_EL1.TCRX."
        ],
        "before": "FEAT_TCR2 introduces the x[TCR2_ELx](#TCR2_ELx|appx_registers_index.fm) registers which provide top-level control of the EL1&0 and EL2&0 translation regimes respectively. These registers are extensions of the corresponding x[TCR_ELx](#TCR_ELx|appx_registers_index.fm) registers."
      },
      "name": "FEAT_TCR2",
      "title": "Support for TCR2_ELx",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HAFT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap7"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HAFT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HAFDBS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HAFT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TCR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_HAFT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "HAFDBS",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_HAFT is OPTIONAL from Armv8.7.",
          "If FEAT_HAFT is implemented, then x[FEAT_HAFDBS](feat:FEAT_HAFDBS) is implemented.",
          "If FEAT_HAFT is implemented, then x[FEAT_TCR2](feat:FEAT_TCR2) is implemented.",
          "The following field identifies the presence of FEAT_HAFT:",
          " - AArch64-ID_AA64MMFR1_EL1.HAFDBS.",
          "For more information, see x[Hardware management of the Table descriptor Access Flag](#CACBIEGJE5|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_HAFT introduces the support for hardware management of the Table descriptor Access flag."
      },
      "name": "FEAT_HAFT",
      "title": "Hardware managed Access Flag for Table descriptors",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_THE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_THE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2PIE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_THE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_THE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TCR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_THE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "THE",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_THE is OPTIONAL from Armv8.8.",
          "When FEAT_THE and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_S2PIE](feat:FEAT_S2PIE) is implemented.",
          "When FEAT_THE and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_FGT2](feat:FEAT_FGT2) is implemented.",
          "If FEAT_THE is implemented, then x[FEAT_TCR2](feat:FEAT_TCR2) is implemented.",
          "The following field identifies the presence of FEAT_THE:",
          " - AArch64-ID_AA64PFR1_EL1.THE.",
          "For more information, see:",
          " - x[Translation Hardening Extension](MDSec.Translation_Hardening_Extension|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Read-Check-Write](CJAJCAHBJ9|C_a64_instruction_set_overview.fm)."
        ],
        "before": [
          "FEAT_THE provides a mechanism to prevent modification of an arbitrary subset of translation table entries from within the Exception level that owns the translation tables, and introduces the following:",
          " - The stage 1 Assured Translation property and the stage 2 AssuredOnly property.",
          " - Stage 2 TopLevel checks.",
          " - Read-Check-Write instructions, RCW* and RCWS*.",
          " - Read-Check-Write mask registers, x[RCWMASK_EL1](AArch64.rcwmask_el1|D_the_aarch64_system_register_descriptions.fm) and x[RCWSMASK_EL1](AArch64.rcwsmask_el1|D_the_aarch64_system_register_descriptions.fm).",
          " - The Protected attribute in stage 1 descriptors."
        ]
      },
      "name": "FEAT_THE",
      "title": "Translation Hardening Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LVA3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LVA3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_D128"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LVA3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LVA"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LVA3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "VARange",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_LVA3 is OPTIONAL from Armv9.3.",
          "If FEAT_LVA3 is implemented, then x[FEAT_D128](feat:FEAT_D128) is implemented.",
          "If FEAT_LVA3 is implemented, then x[FEAT_LVA](feat:FEAT_LVA) is implemented.",
          "The following field identifies the presence of FEAT_LVA3:",
          " - AArch64-ID_AA64MMFR2_EL1.VARange.",
          "For more information, see x[Supported virtual address ranges](#MDSec.Supported_virtual_address_ranges|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_LVA3 introduces support for 56-bit virtual addresses."
      },
      "name": "FEAT_LVA3",
      "title": "56-bit VA",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CP15SDISABLE2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CP15SDISABLE2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL3"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported only when EL3 is executing in AArch32 state.",
          "FEAT_CP15SDISABLE2 is OPTIONAL from Armv8.0.",
          "If FEAT_CP15SDISABLE2 is implemented, then x[FEAT_AA32EL3](feat:FEAT_AA32EL3) is implemented.",
          "For more information, see x[The CP15SDISABLE and CP15SDISABLE2 input signals](#CIHGGFGC|G_the_aarch32_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_CP15SDISABLE2 provides an implementation-defined mechanism, the <b>CP15SDISABLE2</b> signal, which when asserted HIGH prevents writes to a set of Secure CP15 registers. This signal is analogous to the existing <b>CP15SDISABLE</b> signal."
      },
      "name": "FEAT_CP15SDISABLE2",
      "title": "CP15SDISABLE2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_DGH"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_DGH"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DGH",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "These instructions are added to the A64 instruction set only.",
          "FEAT_DGH is OPTIONAL from Armv8.0.",
          "The following field identifies the presence of FEAT_DGH:",
          " - AArch64-ID_AA64ISAR1_EL1.DGH.",
          "For more information, see x[Hint instructions](#CHDBFBAG|C_a64_instruction_set_overview.fm)."
        ],
        "before": "FEAT_DGH introduces the Data Gathering Hint instruction to the hint space."
      },
      "name": "FEAT_DGH",
      "title": "Data Gathering Hint",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ECV"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ECV"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ECV"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ECV",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_ECV is OPTIONAL from Armv8.5.",
          "FEAT_ECV is mandatory from Armv8.6.",
          "The following field identifies the presence of FEAT_ECV:",
          " - AArch64-ID_AA64MMFR0_EL1.ECV.",
          "For more information, see:",
          " - x[Self-hosted trace timestamps](#BABICFCB|G_aarch32_self_hosted_trace.fm).",
          " - x[The profiling data](#CACBAAIB|D_the_statistical_profiling_extension.fm).",
          " - x[The AArch64 view of the Generic Timer](#CJADDEEA|D_the_generic_timer_in_aarch64__.fm).",
          " - x[The AArch32 view of the Generic Timer](#CJAGEIDI|G_the_generic_timer_in_aarch32__.fm)."
        ],
        "before": [
          "FEAT_ECV enhances the Generic Timer architecture. FEAT_ECV provides:",
          " - Self-synchronizing views of the virtual and physical timers in AArch64 state and AArch32 state.",
          " - The ability to scale the generation of the event stream when executing in AArch64 state or AArch32 state.",
          " - When EL2 is using AArch64 state, traps to EL0 and EL1 access to the virtual counter or timer registers, and the physical timer registers when accessed using an EL02 mnemonic. The traps are configured in x[CNTHCTL_EL2](#AArch64.cnthctl_el2|D_aarch64_system_register_descriptions.fm), and apply to EL1 and EL0 accesses, whether EL1 and EL0 are in AArch64 state or AArch32 state.",
          "For more information on the offset to views of physical time, see x[FEAT_ECV_POFF](FEAT_ECV_POFF|A_armv8_architecture_extensions.fm)."
        ]
      },
      "name": "FEAT_ECV",
      "title": "Enhanced Counter Virtualization",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ECV_POFF"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ECV_POFF"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ECV"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_ECV_POFF"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RME"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ECV_POFF"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ECV_POFF"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ECV",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_ECV_POFF is OPTIONAL from Armv8.5.",
          "If FEAT_ECV_POFF is implemented, then x[FEAT_ECV](feat:FEAT_ECV) is implemented.",
          "When x[FEAT_AA64](feat:FEAT_AA64) and FEAT_ECV_POFF are implemented, x[FEAT_AA64EL2](feat:FEAT_AA64EL2) is implemented.",
          "If x[FEAT_RME](feat:FEAT_RME) is implemented, then FEAT_ECV_POFF is implemented.",
          "The following field identifies the presence of FEAT_ECV_POFF:",
          " - AArch64-ID_AA64MMFR0_EL1.ECV."
        ],
        "before": [
          "FEAT_ECV_POFF provides an offset between the EL1 or EL0 view of physical time, and the EL2 or EL3 view of physical time.",
          "The offset to views of physical time at EL1 and EL0 apply in AArch64 state and AArch32 state."
        ]
      },
      "name": "FEAT_ECV_POFF",
      "title": "Enhanced Counter Virtualization Physical Offset",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap6"
            },
            "op": "&&",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL2"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL3"
              }
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FGT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FGT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FGT",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64, and when EL1 is using AArch64, EL0 accesses using AArch32 are also trapped.",
          "FEAT_FGT is OPTIONAL from Armv8.5.",
          "In an Armv8.6 implementation, if x[FEAT_AA64EL2](feat:FEAT_AA64EL2) or x[FEAT_AA64EL3](feat:FEAT_AA64EL3) is implemented, FEAT_FGT is implemented.",
          "The following field identifies the presence of FEAT_FGT:",
          " - AArch64-ID_AA64MMFR0_EL1.FGT.",
          "For more information, see x[Configurable instruction controls](#D1BABHDFHD|D_the_aarch64_system_level_programmers_model.fm)."
        ],
        "before": "FEAT_FGT introduces additional traps to EL2 of EL1 and EL0 access to individual or small groups of System registers and instructions, and traps to EL3 and EL2 of the Debug Communications Channel registers. The traps are independent of existing controls."
      },
      "name": "FEAT_FGT",
      "title": "Fine Grain Traps",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_EPAC"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PAuth2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "APA",
                          "instance": null,
                          "name": "ID_AA64ISAR1_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": ">=",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 3
                  }
                },
                "op": "||",
                "right": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "API",
                          "instance": null,
                          "name": "ID_AA64ISAR1_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": ">=",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 3
                  }
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "APA3",
                        "instance": null,
                        "name": "ID_AA64ISAR2_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 3
                }
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_PAuth2 is OPTIONAL from Armv8.2.",
          "FEAT_PAuth2 is mandatory from Armv8.6.",
          "If FEAT_PAuth2 is implemented, then x[FEAT_PAuth](feat:FEAT_PAuth) is implemented.",
          "If FEAT_PAuth2 is implemented, then x[FEAT_EPAC](feat:FEAT_EPAC) is not implemented.",
          "The following fields identify the presence of FEAT_PAuth2:",
          " - AArch64-ID_AA64ISAR1_EL1.APA.",
          " - AArch64-ID_AA64ISAR1_EL1.API.",
          " - AArch64-ID_AA64ISAR2_EL1.APA3.",
          "For more information, see x[Pointer authentication](#MDSec.Pointer_authentication|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_PAuth2 introduces enhanced pointer authentication functionality that changes the mechanism by which a PAC is added to the pointer."
      },
      "name": "FEAT_PAuth2",
      "title": "Enhancements to pointer authentication",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMU_EXTACR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMU_EXTACR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMU_EXT"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_AMU_EXTACR is OPTIONAL from Armv8.4.",
          "If FEAT_AMU_EXTACR is implemented, then x[FEAT_AMU_EXT](feat:FEAT_AMU_EXT) is implemented.",
          "For more information, see x[The Activity Monitors Extension](#BABHBBIF|D_the_activity_monitors_extension.fm)."
        ],
        "before": [
          "FEAT_AMU_EXTACR implements a control register to enable access to the Activity Monitors External registers.",
          " - If x[FEAT_RME](FEAT_RME|A_armv8_architecture_extensions.fm) is implemented, the register AMROOTCR is implemented to control Root, Realm, Secure and Non-secure accesses to the external AMU registers.",
          " - If x[FEAT_RME](FEAT_RME|A_armv8_architecture_extensions.fm) is not implemented, the register AMSCR is implemented to control Secure and Non-secure accesses to the external AMU registers."
        ]
      },
      "name": "FEAT_AMU_EXTACR",
      "title": "Activity Monitors External Control Register",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMUv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMUv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMUv1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AMUv1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AMU",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AMUv1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AMU",
                      "instance": null,
                      "name": "ID_PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AMUv1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AMU",
                      "instance": null,
                      "name": "ID_PFR0",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMU_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AMUv1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AMU",
                      "instance": null,
                      "name": "EDPFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch32 state and AArch64 state, if the hypervisor is using AArch64.",
          "FEAT_AMUv1p1 is OPTIONAL from Armv8.5.",
          "If FEAT_AMUv1p1 is implemented, then x[FEAT_AMUv1](feat:FEAT_AMUv1) is implemented.",
          "The following fields identify the presence of FEAT_AMUv1p1:",
          " - AArch64-ID_AA64PFR0_EL1.AMU.",
          " - AArch64-ID_PFR0_EL1.AMU.",
          " - AArch32-ID_PFR0.AMU.",
          " - ext-EDPFR.AMU.",
          "For more information, see x[The Activity Monitors Extension](#BABHBBIF|D_the_activity_monitors_extension.fm)."
        ],
        "before": "FEAT_AMUv1p1 introduces support for virtualization of Activity Monitors event counters, and introduces controls to disable access to auxiliary event counters below the highest Exception level."
      },
      "name": "FEAT_AMUv1p1",
      "title": "Activity Monitors Extension version 1.1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HPMN0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap8"
            },
            "op": "&&",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_PMUv3"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_EL2"
              }
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HPMN0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HPMN0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HPMN0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_FGT"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_HPMN0"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "HPMN0",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_HPMN0"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "HPMN0",
                      "instance": null,
                      "name": "ID_DFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_HPMN0"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "HPMN0",
                      "instance": null,
                      "name": "ID_DFR1",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_HPMN0 is OPTIONAL from Armv8.5.",
          "In an Armv8.8 implementation, if x[FEAT_PMUv3](feat:FEAT_PMUv3) and x[FEAT_EL2](feat:FEAT_EL2) are implemented, FEAT_HPMN0 is implemented.",
          "If FEAT_HPMN0 is implemented, then x[FEAT_EL2](feat:FEAT_EL2) is implemented.",
          "If FEAT_HPMN0 is implemented, then x[FEAT_PMUv3](feat:FEAT_PMUv3) and x[FEAT_FGT](feat:FEAT_FGT) are implemented.",
          "The following fields identify the presence of FEAT_HPMN0:",
          " - AArch64-ID_AA64DFR0_EL1.HPMN0.",
          " - AArch64-ID_DFR1_EL1.HPMN0.",
          " - AArch32-ID_DFR1.HPMN0.",
          "For more information, see:",
          " - x[Interaction with EL2](#CACBHJBIF6|D_the_performance_monitors_extension.fm).",
          " - x[Controlling the PMU counters](#Cihidfee|D_the_performance_monitors_extension.fm).",
          " - x[The Performance Monitors Extension](#CEGFBHFB|appx_architectural_constraints_on_unpredictable__.fm).",
          " - x[The Performance Monitors Extension](#CEGIDDHH|appx_architectural_constraints_on_unpredictable__.fm)."
        ],
        "before": "FEAT_HPMN0 permits a hypervisor to provide zero PMU event counters for a guest operating system by setting x[MDCR_EL2](#AArch64.mdcr_el2|D_aarch64_system_register_descriptions.fm).HPMN to zero."
      },
      "name": "FEAT_HPMN0",
      "title": "Setting of MDCR_EL2.HPMN to zero",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAM_PE_BW_CTRL"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAM_PE_BW_CTRL"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MPAMv1p1"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_MPAMv0p1"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAM_PE_BW_CTRL"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "HAS_BW_CTRL",
                    "instance": null,
                    "name": "MPAMIDR_EL1",
                    "slices": null,
                    "state": "AArch64"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 1
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MPAM_PE_BW_CTRL is OPTIONAL from Armv9.3.",
          "If FEAT_MPAM_PE_BW_CTRL is implemented, then x[FEAT_MPAMv1p1](feat:FEAT_MPAMv1p1) or x[FEAT_MPAMv0p1](feat:FEAT_MPAMv0p1) is implemented.",
          "The following field identifies the presence of FEAT_MPAM_PE_BW_CTRL:",
          " - AArch64-MPAMIDR_EL1.HAS_BW_CTRL."
        ],
        "before": "FEAT_MPAM_PE_BW_CTRL introduces support for PE-side bandwidth controls."
      },
      "name": "FEAT_MPAM_PE_BW_CTRL",
      "title": "MPAM PE-side Bandwidth Controls",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAMv1p0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAMv1p0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAM"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAMv1p0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_MPAMv0p1"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MPAMv1p0"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MPAM",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MPAMv1p0 is OPTIONAL from Armv8.2.",
          "If FEAT_MPAMv1p0 is implemented, then x[FEAT_MPAM](feat:FEAT_MPAM) is implemented.",
          "If FEAT_MPAMv1p0 is implemented, then x[FEAT_MPAMv0p1](feat:FEAT_MPAMv0p1) is not implemented.",
          "The following field identifies the presence of FEAT_MPAMv1p0:",
          " - AArch64-ID_AA64PFR0_EL1.MPAM.",
          "For more information, see x[MPAM PE Architecture](#MPAM_pe_architecture|D_mpam_pe_architecture.fm)."
        ],
        "before": "FEAT_MPAMv1p0 introduces support for version 1.0 of the MPAM extension."
      },
      "name": "FEAT_MPAMv1p0",
      "title": "Memory Partitioning and Monitoring Extension version 1.0",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAMv0p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAMv0p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAM"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MPAMv0p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "MPAM",
                        "instance": null,
                        "name": "ID_AA64PFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "==",
                "right": {
                  "_type": "AST.Integer",
                  "value": 0
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "MPAM_frac",
                        "instance": null,
                        "name": "ID_AA64PFR1_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "==",
                "right": {
                  "_type": "AST.Integer",
                  "value": 1
                }
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MPAMv0p1 is OPTIONAL from Armv8.5.",
          "If FEAT_MPAMv0p1 is implemented, then x[FEAT_MPAM](feat:FEAT_MPAM) is implemented.",
          "The following fields identify the presence of FEAT_MPAMv0p1:",
          " - AArch64-ID_AA64PFR0_EL1.MPAM.",
          " - AArch64-ID_AA64PFR1_EL1.MPAM_frac.",
          "For more information, see x[MPAM PE Architecture](#MPAM_pe_architecture|D_mpam_pe_architecture.fm)."
        ],
        "before": "FEAT_MPAMv0p1 introduces support for version 0.1 of the MPAM extension."
      },
      "name": "FEAT_MPAMv0p1",
      "title": "Memory System Resource Partitioning and Monitoring extension version 0.1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAMv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAMv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAM"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAMv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAMv1p0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAMv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_MPAMv0p1"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MPAMv1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "MPAM",
                        "instance": null,
                        "name": "ID_AA64PFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "==",
                "right": {
                  "_type": "AST.Integer",
                  "value": 1
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "MPAM_frac",
                        "instance": null,
                        "name": "ID_AA64PFR1_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 1
                }
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MPAMv1p1 is OPTIONAL from Armv8.5.",
          "If FEAT_MPAMv1p1 is implemented, then x[FEAT_MPAM](feat:FEAT_MPAM) is implemented.",
          "If FEAT_MPAMv1p1 is implemented, then x[FEAT_MPAMv1p0](feat:FEAT_MPAMv1p0) is implemented.",
          "If FEAT_MPAMv1p1 is implemented, then x[FEAT_MPAMv0p1](feat:FEAT_MPAMv0p1) is not implemented.",
          "The following fields identify the presence of FEAT_MPAMv1p1:",
          " - AArch64-ID_AA64PFR0_EL1.MPAM.",
          " - AArch64-ID_AA64PFR1_EL1.MPAM_frac.",
          "For more information, see x[MPAM PE Architecture](#MPAM_pe_architecture|D_mpam_pe_architecture.fm)."
        ],
        "before": "FEAT_MPAMv1p1 introduces support for version 1.1 of the MPAM extension."
      },
      "name": "FEAT_MPAMv1p1",
      "title": "Memory Partitioning and Monitoring extension version 1.1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTPMU"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTPMU"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTPMU"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL2"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL3"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTPMU"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MTPMU",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "SInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTPMU"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MTPMU",
                      "instance": null,
                      "name": "ID_DFR1",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "SInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTPMU"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MTPMU",
                      "instance": null,
                      "name": "ID_DFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "SInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_MTPMU is OPTIONAL from Armv8.5.",
          "If FEAT_MTPMU is implemented, then x[FEAT_PMUv3](feat:FEAT_PMUv3) is implemented.",
          "If FEAT_MTPMU is implemented, then x[FEAT_EL2](feat:FEAT_EL2) or x[FEAT_EL3](feat:FEAT_EL3) is implemented.",
          "The following fields identify the presence of FEAT_MTPMU:",
          " - AArch64-ID_AA64DFR0_EL1.MTPMU.",
          " - AArch32-ID_DFR1.MTPMU.",
          " - AArch64-ID_DFR1_EL1.MTPMU.",
          "For more information, see:",
          " - x[Multithreaded implementations](#CACIAGGH|D_the_performance_monitors_extension.fm).",
          " - x[MDCR_EL3](#AArch64.mdcr_el3|D_aarch64_system_register_descriptions.fm).MTPME",
          " - x[SDCR.MTPME](#AArch32.sdcr|G_aarch32_system_register_descriptions.fm)",
          " - x[MDCR_EL2](#AArch64.mdcr_el2|D_aarch64_system_register_descriptions.fm).MTPME",
          " - x[HDCR](#AArch32.hdcr|G_aarch32_system_register_descriptions.fm).MTPME."
        ],
        "before": [
          "FEAT_MTPMU introduces controls to disable x[PMEVTYPER&lt;n&gt;_EL0](AArch64.pmevtypern_el0|D_aarch64_system_register_descriptions.fm).MT.",
          "From Armv8.6, when x[FEAT_PMUv3](FEAT_PMUv3|A_armv8_architecture_extensions.fm) is implemented, multithreaded event counting is only supported in multithreaded implementations that also include FEAT_MTPMU."
        ]
      },
      "name": "FEAT_MTPMU",
      "title": "Multi-threaded PMU extensions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TWED"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TWED"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TWED",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_TWED is OPTIONAL from Armv8.5.",
          "The following field identifies the presence of FEAT_TWED:",
          " - AArch64-ID_AA64MMFR1_EL1.TWED.",
          "For more information, see x[The Wait for Event and Wait for Event with Timeout instructions](#MDSec._wait_event_wait_event_with_timeout_instructions|D_the_aarch64_system_level_programmers_model.fm)."
        ],
        "before": "FEAT_TWED introduces support for configurable delayed trapping of the WFE and WFET instructions."
      },
      "name": "FEAT_TWED",
      "title": "Delayed Trapping of WFE",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The Armv8.4 architecture extension is an extension to Armv8.3. It adds mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv8.4 compliant if all of the following apply:",
          "- It is Armv8.3 compliant.",
          " - It includes all of the Armv8.4 architectural features that are mandatory.",
          "An Armv8.4 compliant implementation can additionally include:",
          " - Armv8.4 features that are optional.",
          "- Any arbitrary subset of the architectural features of Armv8.5, subject only to those constraints that require that certain features be implemented together."
        ]
      },
      "name": "v8Ap4",
      "title": "The Armv8.4 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSBS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SSBS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SSBS",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SSBS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SSBS",
                      "instance": null,
                      "name": "ID_PFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SSBS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SSBS",
                      "instance": null,
                      "name": "ID_PFR2",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_SSBS is OPTIONAL from Armv8.0.",
          "The following fields identify the presence of FEAT_SSBS:",
          " - AArch64-ID_AA64PFR1_EL1.SSBS.",
          " - AArch64-ID_PFR2_EL1.SSBS.",
          " - AArch32-ID_PFR2.SSBS.",
          "For more information, see:",
          " - [AArch64 Speculative Store Bypass Safe](#AA64_SSBS).",
          " - [AArch32 Speculative Store Bypass Safe](#AA32_SSBS)."
        ],
        "before": "FEAT_SSBS allows software to indicate whether hardware is permitted to load or store speculatively in a manner that could give rise to a cache timing side channel, which in turn could be used to derive an address from values loaded to a register from memory."
      },
      "name": "FEAT_SSBS",
      "title": " Speculative Store Bypass Safe",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSBS2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSBS2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SSBS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SSBS2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SSBS",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SSBS2 is OPTIONAL from Armv8.0.",
          "If FEAT_SSBS2 is implemented, then x[FEAT_SSBS](feat:FEAT_SSBS) is implemented.",
          "The following field identifies the presence of FEAT_SSBS2:",
          " - AArch64-ID_AA64PFR1_EL1.SSBS.",
          "For more information, see:",
          " - [AArch64 Speculative Store Bypass Safe](#AA64_SSBS).",
          " - [AArch32 Speculative Store Bypass Safe](#AA32_SSBS)."
        ],
        "before": "FEAT_SSBS2 provides controls for the MSR and MRS instructions to read and write the x[PSTATE](#PSTATE|D_the_aarch64_system_level_programmers_model.fm).SSBS field."
      },
      "name": "FEAT_SSBS2",
      "title": "MRS and MSR instructions for SSBS version 2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CSV2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CSV2",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CSV2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CSV2",
                      "instance": null,
                      "name": "ID_PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CSV2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CSV2",
                      "instance": null,
                      "name": "ID_PFR0",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_CSV2 is OPTIONAL from Armv8.0.",
          "FEAT_CSV2 is mandatory from Armv8.5.",
          "The following fields identify the presence of FEAT_CSV2:",
          " - AArch64-ID_AA64PFR0_EL1.CSV2.",
          " - AArch64-ID_PFR0_EL1.CSV2.",
          " - AArch32-ID_PFR0.CSV2.",
          "For more information, see:",
          " - For AArch64, x[Restrictions on the effects of speculation](#CHDHJGDA).",
          " - x[AArch32 restrictions on the effects of speculation](#AA32_Restrictions_On_Effects_Of_Speculation)."
        ],
        "before": "FEAT_CSV2 introduces a mechanism to identify if hardware cannot disclose information about whether any prediction resource, such as branch target, data-value, or cache prefetch, trained in one hardware described context can control speculative execution in a different hardware described context."
      },
      "name": "FEAT_CSV2",
      "title": "Cache Speculation Variant 2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CSV3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CSV3",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_CSV3 is OPTIONAL from Armv8.0.",
          "FEAT_CSV3 is mandatory from Armv8.5.",
          "The following field identifies the presence of FEAT_CSV3:",
          " - AArch64-ID_AA64PFR0_EL1.CSV3."
        ],
        "before": "FEAT_CSV3 introduces a mechanism to identify whether data loaded or read from a register under speculation where the data load or register read would not be permitted architecturally, can be used by instructions newer than the load or register read in a manner that allows the value of the inaccessible data to be recovered by code architecturally executed."
      },
      "name": "FEAT_CSV3",
      "title": "Cache Speculation Variant 3",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SB"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SB"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SB"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SB",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "SInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SB"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SB",
                      "instance": null,
                      "name": "ID_ISAR6_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "SInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SB"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SB",
                      "instance": null,
                      "name": "ID_ISAR6",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "SInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_SB is OPTIONAL from Armv8.0.",
          "FEAT_SB is mandatory from Armv8.5.",
          "The following fields identify the presence of FEAT_SB:",
          " - AArch64-ID_AA64ISAR1_EL1.SB.",
          " - AArch64-ID_ISAR6_EL1.SB.",
          " - AArch32-ID_ISAR6.SB.",
          "For more information, see:",
          " - x[Speculation Barrier (SB)](#CHDHDDBE|B_the_aarch64_application_level_memory_model.fm).",
          " - x[Barriers and CLREX instructions](#CHDDDDJG|C_a64_instruction_set_overview.fm).",
          " - x[Speculation Barrier (SB)](#CEGGIAEB|E_the_aarch32_application_level_memory__.fm).",
          " - x[Miscellaneous instructions](#BABFCGGG|F_AArch32_instruction_sets_overview.fm)."
        ],
        "before": "Speculation Barrier FEAT_SB introduces a barrier to control speculation."
      },
      "name": "FEAT_SB",
      "title": "Speculation Barrier",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPECRES"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPECRES"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPECRES"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SPECRES",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPECRES"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SPECRES",
                      "instance": null,
                      "name": "ID_ISAR6_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPECRES"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SPECRES",
                      "instance": null,
                      "name": "ID_ISAR6",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_SPECRES is OPTIONAL from Armv8.0.",
          "FEAT_SPECRES is mandatory from Armv8.5.",
          "The following fields identify the presence of FEAT_SPECRES:",
          " - AArch64-ID_AA64ISAR1_EL1.SPECRES.",
          " - AArch64-ID_ISAR6_EL1.SPECRES.",
          " - AArch32-ID_ISAR6.SPECRES.",
          "For more information, see:",
          " - x[Prediction restriction instructions](#CIHJAHDA|C_the_a64_system_instruction_class.fm).",
          " - x[Execution, data prediction and prefetching restriction System instructions](#CHDFEIFG|D_the_aarch64_system_level_memory_model.fm).",
          " - x[Execution and data prediction restriction System instructions](#CHDEADIG|G_the_aarch32_system_level_memory_model.fm)."
        ],
        "before": "FEAT_SPECRES introduces System instructions that prevent predictions based on information gathered from earlier execution within a particular execution context from affecting the later speculative execution within that context, to the extent that the speculative execution is observable through side channels."
      },
      "name": "FEAT_SPECRES",
      "title": "Speculation restriction instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EVT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap5"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EVT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_EVT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "EVT",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_EVT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "EVT",
                      "instance": null,
                      "name": "ID_MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_EVT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "EVT",
                      "instance": null,
                      "name": "ID_MMFR4",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_EVT is OPTIONAL from Armv8.2.",
          "In an Armv8.5 implementation, if x[FEAT_EL2](feat:FEAT_EL2) is implemented, FEAT_EVT is implemented.",
          "The following fields identify the presence of FEAT_EVT:",
          " - AArch64-ID_AA64MMFR2_EL1.EVT.",
          " - AArch64-ID_MMFR4_EL1.EVT.",
          " - AArch32-ID_MMFR4.EVT."
        ],
        "before": [
          "FEAT_EVT introduces additional traps for EL1 and EL0 Cache controls in:",
          " - x[HCR_EL2](#AArch64.hcr_el2|D_aarch64_system_register_descriptions.fm)",
          " - x[HCR2](#AArch32.hcr2|G_aarch32_system_register_descriptions.fm).",
          "These traps are independent of existing controls."
        ]
      },
      "name": "FEAT_EVT",
      "title": "Enhanced Virtualization Traps",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EVT2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap5"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EVT2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EVT2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EVT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_EVT2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "EVT",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_EVT2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "EVT",
                      "instance": null,
                      "name": "ID_MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_EVT2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "EVT",
                      "instance": null,
                      "name": "ID_MMFR4",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_EVT2 is OPTIONAL from Armv8.2.",
          "In an Armv8.5 implementation, if x[FEAT_EL2](feat:FEAT_EL2) is implemented, FEAT_EVT2 is implemented.",
          "If FEAT_EVT2 is implemented, then x[FEAT_EVT](feat:FEAT_EVT) is implemented.",
          "The following fields identify the presence of FEAT_EVT2:",
          " - AArch64-ID_AA64MMFR2_EL1.EVT.",
          " - AArch64-ID_MMFR4_EL1.EVT.",
          " - AArch32-ID_MMFR4.EVT."
        ],
        "before": [
          "x[FEAT_EVT2](#FEAT_EVT2) extends x[FEAT_EVT](#FEAT_EVT) to introduce additional traps for further EL1 and EL0 system control operations in:",
          " - AArch64-HCR_EL2.",
          " - AArch32-HCR2."
        ]
      },
      "name": "FEAT_EVT2",
      "title": "Enhanced Virtualization Traps 2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_GTG"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap5"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_GTG"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_GTG"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TGran4_2",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_GTG"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TGran16_2",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_GTG"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TGran64_2",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_GTG is OPTIONAL from Armv8.0.",
          "In an Armv8.5 implementation, if x[FEAT_AA64EL2](feat:FEAT_AA64EL2) is implemented, FEAT_GTG is implemented.",
          "The following fields identify the presence of FEAT_GTG:",
          " - AArch64-ID_AA64MMFR0_EL1.TGran4_2.",
          " - AArch64-ID_AA64MMFR0_EL1.TGran16_2.",
          " - AArch64-ID_AA64MMFR0_EL1.TGran64_2.",
          "For more information, see x[Translation granules](#MDSec.Translation_granules|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_GTG allows a hypervisor to support different granule sizes for stage 2 and stage 1 translation, and allows a nested hypervisor to determine what stage 2 granule sizes are available."
      },
      "name": "FEAT_GTG",
      "title": "Guest translation granule size",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_BTI"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_BTI"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_BTI"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "BT",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_BTI is OPTIONAL from Armv8.4.",
          "FEAT_BTI is mandatory from Armv8.5.",
          "The following field identifies the presence of FEAT_BTI:",
          " - AArch64-ID_AA64PFR1_EL1.BT.",
          "For more information, see:",
          " - x[Table descriptor format](#MDSec.Table_descriptor_format|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[PSTATE.BTYPE](#MDSec.PSTATE_BTYPE|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Effect of entering Debug state on PSTATE](#BABJDGII|H_debug_state.fm)."
        ],
        "before": [
          "FEAT_BTI allows memory pages to be guarded against the execution of instructions that are not the intended target of a branch. To do this, it introduces:",
          " - The GP field, which denotes the blocks and pages in stage 1 translation tables that are guarded pages.",
          " - The x[PSTATE](#PSTATE|D_the_aarch64_system_level_programmers_model.fm).BTYPE field, which is used to determine whether an access to a guarded memory region will generate a Branch Target exception.",
          " - The x[BTI](#A64.instructions.BTI|C_a64_base_instruction_descriptions.fm) instruction, which is used to guard against the execution of instructions that are not the intended target of a branch."
        ]
      },
      "name": "FEAT_BTI",
      "title": "Branch Target Identification",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_E0PD"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_E0PD"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_E0PD"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_E0PD"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "E0PD",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only. When EL1 is using AArch64 state, this feature affects access to EL0, in either Execution state.",
          "FEAT_E0PD is OPTIONAL from Armv8.4.",
          "FEAT_E0PD is mandatory from Armv8.5.",
          "If FEAT_E0PD is implemented, then x[FEAT_CSV3](feat:FEAT_CSV3) is implemented.",
          "The following field identifies the presence of FEAT_E0PD:",
          " - AArch64-ID_AA64MMFR2_EL1.E0PD.",
          "For more information, see x[Preventing EL0 access to halves of the address map](#MDSec.Preventing_EL0_access_to_halves_of_the_address_map|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_E0PD prevents access at EL0 to half of the addresses in the memory map."
      },
      "name": "FEAT_E0PD",
      "title": "Preventing EL0 access to halves of address maps",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_BigEnd"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_BigEnd"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_BigEndEL0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MixedEnd"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_BigEnd"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_BigEnd is OPTIONAL from Armv8.0.",
          "If FEAT_BigEnd is implemented, then x[FEAT_BigEndEL0](feat:FEAT_BigEndEL0) is implemented.",
          "If x[FEAT_MixedEnd](feat:FEAT_MixedEnd) is implemented, then FEAT_BigEnd is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_BigEnd",
      "title": "Support for big-endian at EL1 and above",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LittleEnd"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LittleEnd"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LittleEndEL0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MixedEnd"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LittleEnd"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_LittleEnd is OPTIONAL from Armv8.0.",
          "If FEAT_LittleEnd is implemented, then x[FEAT_LittleEndEL0](feat:FEAT_LittleEndEL0) is implemented.",
          "If x[FEAT_MixedEnd](feat:FEAT_MixedEnd) is implemented, then FEAT_LittleEnd is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_LittleEnd",
      "title": "Support for little-endian at EL1 and above",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_BigEndEL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MixedEndEL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_BigEndEL0"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_BigEndEL0 is OPTIONAL from Armv8.0.",
          "If x[FEAT_MixedEndEL0](feat:FEAT_MixedEndEL0) is implemented, then FEAT_BigEndEL0 is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_BigEndEL0",
      "title": "Support for big-endian at EL0",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LittleEndEL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MixedEndEL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LittleEndEL0"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_LittleEndEL0 is OPTIONAL from Armv8.0.",
          "If x[FEAT_MixedEndEL0](feat:FEAT_MixedEndEL0) is implemented, then FEAT_LittleEndEL0 is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_LittleEndEL0",
      "title": "Support for little-endian at EL0",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_DPB2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_DPB2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_DPB2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_DPB"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_DPB2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DPB",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_DPB2 is OPTIONAL from Armv8.1.",
          "FEAT_DPB2 is mandatory from Armv8.5.",
          "If FEAT_DPB2 is implemented, then x[FEAT_DPB](feat:FEAT_DPB) is implemented.",
          "The following field identifies the presence of FEAT_DPB2:",
          " - AArch64-ID_AA64ISAR1_EL1.DPB.",
          "For more information, see [Terminology for Clean, Invalidate, and Clean and Invalidate instructions](#CBHBEGGC)."
        ],
        "before": [
          "FEAT_DPB2 allows two levels of cache clean to the x[Point of Persistence](#BEIJHICG|D_the_aarch64_system_level_memory_model.fm) by:",
          " - Redefining x[Point of Persistence](#BEIJHICG|D_the_aarch64_system_level_memory_model.fm), which changes the scope of DC CVAP.",
          " - Defining a x[Point of Deep Persistence](#CHDDHJEF|D_the_aarch64_system_level_memory_model.fm).",
          " - Adding the x[DC CVADP](#AArch64.dc_cvadp|C_the_a64_system_instruction_class.fm) System instruction."
        ]
      },
      "name": "FEAT_DPB2",
      "title": "DC CVADP instruction",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FlagM2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FlagM2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FlagM"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FlagM2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TS",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "These instructions are added to the A64 instruction set only.",
          "FEAT_FlagM2 is OPTIONAL from Armv8.4.",
          "If FEAT_FlagM2 is implemented, then x[FEAT_FlagM](feat:FEAT_FlagM) is implemented.",
          "The following field identifies the presence of FEAT_FlagM2:",
          " - AArch64-ID_AA64ISAR0_EL1.TS.",
          "For more information, see x[Flag manipulation instructions](#CEGDIFAE|C_a64_instruction_set_overview.fm)."
        ],
        "before": "FEAT_FlagM2 provides instructions that convert between the PSTATE condition flag format used by the FCMP instruction and an alternative format described in x[Condition flags and related instructions](#CJAFJCHJ|C_a64_base_instruction_descriptions.fm)."
      },
      "name": "FEAT_FlagM2",
      "title": "Enhancements to flag manipulation instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ExS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ExS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ExS",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_ExS is OPTIONAL from Armv8.4.",
          "The following field identifies the presence of FEAT_ExS:",
          " - AArch64-ID_AA64MMFR0_EL1.ExS.",
          "For more information, see [Context Synchronization event](#BABDJFHG)."
        ],
        "before": [
          "FEAT_ExS provides a mechanism to control whether exception entry and exception return are Context Synchronization events.",
          "Fields in the x[SCTLR_ELx](SCTLR_ELx|appx_registers_index.fm) registers enable and disable context synchronization at exception entry and return at an Exception level."
        ]
      },
      "name": "FEAT_ExS",
      "title": "Context synchronization and exception handling",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FRINTTS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap5"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FRINTTS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FRINTTS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AdvSIMD"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FRINTTS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FRINTTS",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "These instructions are added to the A64 instruction set only.",
          "FEAT_FRINTTS is OPTIONAL from Armv8.4.",
          "In an Armv8.5 implementation, if x[FEAT_FP](feat:FEAT_FP) is implemented, FEAT_FRINTTS is implemented.",
          "If FEAT_FRINTTS is implemented, then x[FEAT_FP](feat:FEAT_FP) and x[FEAT_AdvSIMD](feat:FEAT_AdvSIMD) are implemented.",
          "The following field identifies the presence of FEAT_FRINTTS:",
          " - AArch64-ID_AA64ISAR1_EL1.FRINTTS.",
          "For more information, see x[Floating-point round to integral value](#CHDCFIIH|C_a64_instruction_set_overview.fm)."
        ],
        "before": "FEAT_FRINTTS provides instructions that round a floating-point number to an integral valued floating-point number that fits in a 32-bit or 64-bit integer number range."
      },
      "name": "FEAT_FRINTTS",
      "title": "Floating-point to integer instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MTE",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MTE is OPTIONAL from Armv8.4.",
          "The following field identifies the presence of FEAT_MTE:",
          " - AArch64-ID_AA64PFR1_EL1.MTE.",
          "For more information, see:",
          " - x[The Memory Tagging Extension](#CACJAEHE|D_the_memory_tagging_extension.fm).",
          " - x[The AArch64 Application Level Memory Model](#CHDHJJGH|B_the_aarch64_application_level_memory_model.fm).",
          " - [PMU Event Descriptions](#chap.event_descriptions).",
          " - x[The Statistical Profiling Extension](#BABHHFEG|D_the_statistical_profiling_extension.fm).",
          " - x[Debug State](#BABGFBEG|H_debug_state.fm)."
        ],
        "before": "FEAT_MTE provides architectural support for runtime, always-on detection of various classes of memory error to aid with software debugging to eliminate vulnerabilities arising from memory-unsafe languages."
      },
      "name": "FEAT_MTE",
      "title": "Memory Tagging Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTE2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MTE",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MTE2 is OPTIONAL from Armv8.4.",
          "If FEAT_MTE2 is implemented, then x[FEAT_MTE](feat:FEAT_MTE) is implemented.",
          "The following field identifies the presence of FEAT_MTE2:",
          " - AArch64-ID_AA64PFR1_EL1.MTE.",
          "For more information, see:",
          " - x[The Memory Tagging Extension](#CACJAEHE|D_the_memory_tagging_extension.fm).",
          " - x[The AArch64 Application Level Memory Model](#CHDHJJGH|B_the_aarch64_application_level_memory_model.fm).",
          " - [PMU Event Descriptions](#chap.event_descriptions).",
          " - x[The Statistical Profiling Extension](#BABHHFEG|D_the_statistical_profiling_extension.fm).",
          " - x[Debug State](#BABGFBEG|H_debug_state.fm)."
        ],
        "before": "FEAT_MTE2 provides architectural support for runtime, always-on detection of various classes of memory error to aid with software debugging to eliminate vulnerabilities arising from memory-unsafe languages."
      },
      "name": "FEAT_MTE2",
      "title": "Memory Tagging Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE_ASYNC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE_ASYNC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_MTE2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTE2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MTE_ASYNC"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "MTE_frac",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "SInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 0
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MTE_ASYNC is OPTIONAL from Armv8.5.",
          "If FEAT_MTE_ASYNC is implemented, then x[FEAT_MTE2](feat:FEAT_MTE2) is implemented.",
          "The following field identifies the presence of FEAT_MTE_ASYNC:",
          " - AArch64-ID_AA64PFR1_EL1.MTE_frac.",
          "For more information, see:",
          " - x[The Memory Tagging Extension](#CACJAEHE|D_the_memory_tagging_extension.fm).",
          " - x[The AArch64 Application Level Memory Model](#CHDHJJGH|B_the_aarch64_application_level_memory_model.fm).",
          " - [PMU Event Descriptions](#chap.event_descriptions).",
          " - x[The Statistical Profiling Extension](#BABHHFEG|D_the_statistical_profiling_extension.fm).",
          " - x[Debug State](#BABGFBEG|H_debug_state.fm)."
        ],
        "before": "FEAT_MTE_ASYNC provides support for asynchronously accumulating Tag Check Faults into the x[TFSRE0_EL1](AArch64.tfsre0_el1|D_aarch64_system_register_descriptions.fm) or x[TFSR_ELx](TFSR_ELx|appx_registers_index.fm) registers. A PE that is compliant with x[FEAT_MTE2](FEAT_MTE2|A_armv8_architecture_extensions.fm) is compliant with the behavior defined for this feature."
      },
      "name": "FEAT_MTE_ASYNC",
      "title": "Asynchronous reporting of Tag Check Fault",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap5"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p5"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PMUVer",
                        "instance": null,
                        "name": "ID_AA64DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 6
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PMUVer",
                        "instance": null,
                        "name": "ID_AA64DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p5"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 6
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p5"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0",
                        "slices": null,
                        "state": "AArch32"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 6
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0",
                        "slices": null,
                        "state": "AArch32"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p5"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMUVer",
                      "instance": null,
                      "name": "EDDFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 6
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMUVer",
                      "instance": null,
                      "name": "EDDFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "<",
              "right": {
                "_type": "AST.Integer",
                "value": 15
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_PMUv3p5 is OPTIONAL from Armv8.4.",
          "In an Armv8.5 implementation, if x[FEAT_PMUv3](feat:FEAT_PMUv3) is implemented, FEAT_PMUv3p5 is implemented.",
          "If FEAT_PMUv3p5 is implemented, then x[FEAT_PMUv3p4](feat:FEAT_PMUv3p4) is implemented.",
          "The following fields identify the presence of FEAT_PMUv3p5:",
          " - AArch64-ID_AA64DFR0_EL1.PMUVer.",
          " - AArch64-ID_DFR0_EL1.PerfMon.",
          " - AArch32-ID_DFR0.PerfMon.",
          " - ext-EDDFR.PMUVer.",
          "For more information, see:",
          " - x[Behavior on overflow](#Cihhhafh|D_the_performance_monitors_extension.fm).",
          " - x[Controlling the PMU counters](#Cihidfee|D_the_performance_monitors_extension.fm).",
          " - [PMU Event Descriptions](#chap.event_descriptions)."
        ],
        "before": [
          "FEAT_PMUv3p5 extends event counters to 64-bit event counters, and introduces mechanisms to disable the cycle counter in Secure state, in EL3, and in EL2.",
          "FEAT_PMUv3p5 relaxes the behavior of x[PMCR](#CIHDFEGB|appx_registers_index.fm).{IMP, IDCODE}, and deprecates use of these fields."
        ]
      },
      "name": "FEAT_PMUv3p5",
      "title": "Armv8.5 PMU extensions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RNG"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RNG"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RNDR",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_RNG is OPTIONAL from Armv8.4.",
          "The following field identifies the presence of FEAT_RNG:",
          " - AArch64-ID_AA64ISAR0_EL1.RNDR.",
          "For more information, see:",
          " - x[Effect of random number generation instructions on Condition flags](#CJAHHFHF|C_a64_base_instruction_descriptions.fm) ",
          " - x[Appendix K14 Random Number Generation](#BABIGBCB|appx_random_number_generation.fm)"
        ],
        "before": "FEAT_RNG introduces the x[RNDR](#AArch64.rndr|D_aarch64_system_register_descriptions) and x[RNDRRS](#AArch64.rndrrs|D_aarch64_system_register_descriptions) registers. Reads to these registers return a 64-bit random number. A read to x[RNDRRS](#AArch64.rndrrs|D_aarch64_system_register_descriptions) will cause a reseeding of the random number before the generation of the random number that is returned."
      },
      "name": "FEAT_RNG",
      "title": "Random number generator",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RNG_TRAP"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RNG_TRAP"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RNDR_trap",
                      "instance": null,
                      "name": "ID_AA64PFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_RNG_TRAP is OPTIONAL from Armv8.4.",
          "The following field identifies the presence of FEAT_RNG_TRAP:",
          " - AArch64-ID_AA64PFR1_EL1.RNDR_trap."
        ],
        "before": "FEAT_RNG_TRAP introduces support for EL3 trapping of reads of the x[RNDR](#AArch64.rndr|D_aarch64_system_register_descriptions) and x[RNDRRS](#AArch64.rndrrs|D_aarch64_system_register_descriptions) registers."
      },
      "name": "FEAT_RNG_TRAP",
      "title": "Trapping support for RNDR/RNDRRS",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The Armv8.3 architecture extension is an extension to Armv8.2. It adds mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv8.3 compliant if all of the following apply:",
          "- It is Armv8.2 compliant.",
          " - It includes all of the Armv8.3 architectural features that are mandatory.",
          "An Armv8.3 compliant implementation can additionally include:",
          " - Armv8.3 features that are optional.",
          "- Any arbitrary subset of the architectural features of Armv8.4, subject only to those constraints that require that certain features be implemented together."
        ]
      },
      "name": "v8Ap3",
      "title": "The Armv8.3 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_DotProd"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap4"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AdvSIMD"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_DotProd"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_DotProd"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DP",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_DotProd"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DP",
                      "instance": null,
                      "name": "ID_ISAR6_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_DotProd"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DP",
                      "instance": null,
                      "name": "ID_ISAR6",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "These instructions are added to the A64 and A32/T32 instruction sets.",
          "FEAT_DotProd is OPTIONAL from Armv8.1.",
          "In an Armv8.4 implementation, if x[FEAT_AdvSIMD](feat:FEAT_AdvSIMD) is implemented, FEAT_DotProd is implemented.",
          "The following fields identify the presence of FEAT_DotProd:",
          " - AArch64-ID_AA64ISAR0_EL1.DP.",
          " - AArch64-ID_ISAR6_EL1.DP.",
          " - AArch32-ID_ISAR6.DP.",
          "For more information, see:",
          " - x[SIMD integer dot product](#BABHGGFB|C_a64_instruction_set_overview.fm).",
          " - x[Advanced SIMD dot product instructions](#CEGCDIDF|F_AArch32_instruction_sets_overview.fm)."
        ],
        "before": "FEAT_DotProd provides instructions to perform a four-way vector dot product of 8-bit integers, accumulating each sum of four products into a 32-bit integer. Each 8-bit input can be treated as a signed or unsigned value."
      },
      "name": "FEAT_DotProd",
      "title": "Advanced SIMD dot product instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FHM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap4"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP16"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FHM"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_FHM"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP16"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FHM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FHM",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FHM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FHM",
                      "instance": null,
                      "name": "ID_ISAR6_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FHM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FHM",
                      "instance": null,
                      "name": "ID_ISAR6",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "These instructions are added to the A64 and A32/T32 instruction sets.",
          "FEAT_FHM is OPTIONAL from Armv8.1.",
          "In an Armv8.4 implementation, if x[FEAT_FP16](feat:FEAT_FP16) is implemented, FEAT_FHM is implemented.",
          "In an Armv8.2 implementation, if FEAT_FHM is implemented, x[FEAT_FP16](feat:FEAT_FP16) is implemented.",
          "The following fields identify the presence of FEAT_FHM:",
          " - AArch64-ID_AA64ISAR0_EL1.FHM.",
          " - AArch64-ID_ISAR6_EL1.FHM.",
          " - AArch32-ID_ISAR6.FHM.",
          "For more information, see:",
          " - x[SIMD arithmetic](#CJAJAHBI|C_a64_instruction_set_overview.fm).",
          " - x[SIMD by element arithmetic](#CJABAAAD|C_a64_instruction_set_overview.fm).",
          " - x[Advanced SIMD multiply instructions](#BABGBIDA|F_AArch32_instruction_sets_overview.fm)."
        ],
        "before": "FEAT_FHM introduces half-precision to single-precision fused multiply-add instructions."
      },
      "name": "FEAT_FHM",
      "title": "Floating-point half-precision to single-precision multiply-add instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Secure"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.UnaryOp",
              "expr": {
                "_type": "AST.Identifier",
                "value": "FEAT_RME"
              },
              "op": "!"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Secure"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is not supported if EL2 is using AArch32.",
          "FEAT_Secure is OPTIONAL from Armv8.0.",
          "If FEAT_RME is not implemented and x[FEAT_EL3](feat:FEAT_EL3) is implemented, then FEAT_Secure is implemented."
        ],
        "before": "FEAT_Secure adds support for Secure state."
      },
      "name": "FEAT_Secure",
      "title": "Support for Secure state",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SEL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "v8Ap4"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL2"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_Secure"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SEL2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SEL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TTST"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SEL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_PCSRv8"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SEL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SEL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Secure"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SEL2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SEL2",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is not supported if EL2 is using AArch32.",
          "FEAT_SEL2 is OPTIONAL from Armv8.3.",
          "In an Armv8.4 implementation, if x[FEAT_AA64EL2](feat:FEAT_AA64EL2) and x[FEAT_Secure](feat:FEAT_Secure) are implemented, FEAT_SEL2 is implemented.",
          "If FEAT_SEL2 is implemented, then x[FEAT_TTST](feat:FEAT_TTST) is implemented.",
          "If FEAT_SEL2 is implemented, then x[FEAT_PCSRv8](feat:FEAT_PCSRv8) is not implemented.",
          "If FEAT_SEL2 is implemented, then x[FEAT_EL2](feat:FEAT_EL2) is implemented.",
          "If FEAT_SEL2 is implemented, then x[FEAT_Secure](feat:FEAT_Secure) is implemented.",
          "The following field identifies the presence of FEAT_SEL2:",
          " - AArch64-ID_AA64PFR0_EL1.SEL2.",
          "For more information, see:",
          " - x[Security states](#BEIJBIBH|D_the_aarch64_system_level_programmers_model.fm)",
          " - x[Translation regimes](#MDSec.Translation_regimes|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_SEL2 permits EL2 to be implemented in Secure state. When Secure EL2 is enabled, a translation regime is introduced that follows the same format as the other Secure translation regimes."
      },
      "name": "FEAT_SEL2",
      "title": "Secure EL2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2FWB"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap4"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2FWB"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_S2FWB"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_S2FWB"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FWB",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_S2FWB"
            },
            "op": "==>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LoUU",
                      "instance": null,
                      "name": "CLIDR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "==",
              "right": {
                "_type": "AST.Integer",
                "value": 0
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_S2FWB"
            },
            "op": "==>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LoUIS",
                      "instance": null,
                      "name": "CLIDR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "==",
              "right": {
                "_type": "AST.Integer",
                "value": 0
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_S2FWB is OPTIONAL from Armv8.3.",
          "In an Armv8.4 implementation, if x[FEAT_AA64EL2](feat:FEAT_AA64EL2) is implemented, FEAT_S2FWB is implemented.",
          "If FEAT_S2FWB is implemented, then x[FEAT_AA64EL2](feat:FEAT_AA64EL2) is implemented.",
          "The following fields identify the presence of FEAT_S2FWB:",
          " - AArch64-ID_AA64MMFR2_EL1.FWB.",
          " - AArch64-CLIDR_EL1.LoUU.",
          " - AArch64-CLIDR_EL1.LoUIS.",
          "For more information, see:",
          " - x[Block descriptor and Page descriptor formats](#MDSec.Block_descriptor_and_page_descriptor_formats|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Stage 2 memory type and Cacheability attributes when FEAT_S2FWB is enabled](#MDSec.Stage_2_memory_type_and_Cacheability_attributes_when_FEAT_S2FWB_is_enabled|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_S2FWB reduces the requirement of additional cache maintenance instructions in systems where the data Cacheability attributes used by the Guest operating system are different from those expected by the Hypervisor. If this feature is implemented, there is no meaningful distinction between the Inner and Outer Shareability domains for accesses to Normal Cacheable memory."
      },
      "name": "FEAT_S2FWB",
      "title": "Stage 2 forced Write-Back",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_DIT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_DIT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_DIT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DIT",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_DIT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DIT",
                      "instance": null,
                      "name": "ID_PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_DIT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DIT",
                      "instance": null,
                      "name": "ID_PFR0",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_DIT is OPTIONAL from Armv8.3.",
          "FEAT_DIT is mandatory from Armv8.4.",
          "The following fields identify the presence of FEAT_DIT:",
          " - AArch64-ID_AA64PFR0_EL1.DIT.",
          " - AArch64-ID_PFR0_EL1.DIT.",
          " - AArch32-ID_PFR0.DIT.",
          "For more information, see:",
          " - [About PSTATE.DIT](#BEICCDDAB3).",
          " - [About the DIT bit](#BEIIDCEG)."
        ],
        "before": "FEAT_DIT provides a mechanism for software to indicate that a sequence of code is intended to be independent from data values from certain instructions within the sequence."
      },
      "name": "FEAT_DIT",
      "title": "Data Independent Timing instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_IDST"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_IDST"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_IDST"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "IDS",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_IDST is OPTIONAL from Armv8.3.",
          "FEAT_IDST is mandatory from Armv8.4.",
          "The following field identifies the presence of FEAT_IDST:",
          " - AArch64-ID_AA64MMFR2_EL1.IDS."
        ],
        "before": "FEAT_IDST causes all AArch64 read accesses to the feature ID space when exceptions are generated to be reported in ESR_ELx using the EC code `0x18`."
      },
      "name": "FEAT_IDST",
      "title": "ID space trap handling",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FlagM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FlagM"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FlagM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TS",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "These instructions are added to the A64 instruction set only.",
          "FEAT_FlagM is OPTIONAL from Armv8.1.",
          "FEAT_FlagM is mandatory from Armv8.4.",
          "The following field identifies the presence of FEAT_FlagM:",
          " - AArch64-ID_AA64ISAR0_EL1.TS.",
          "For more information, see x[Flag manipulation instructions](#CEGDIFAE|C_a64_instruction_set_overview.fm)."
        ],
        "before": "FEAT_FlagM provides instructions that manipulate the x[PSTATE](#PSTATE|D_the_aarch64_system_level_programmers_model.fm).{N,Z,C,V} flags."
      },
      "name": "FEAT_FlagM",
      "title": "Condition flag manipulation instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LSE2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LSE2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LSE2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AT",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_LSE2 is OPTIONAL from Armv8.2.",
          "FEAT_LSE2 is mandatory from Armv8.4.",
          "The following field identifies the presence of FEAT_LSE2:",
          " - AArch64-ID_AA64MMFR2_EL1.AT.",
          "For more information, see:",
          " - x[Requirements for single-copy atomicity](#CHDDCBCC|B_the_aarch64_application_level_memory_model.fm).",
          " - x[Alignment of data accesses](#CHDFFEGJ|B_the_aarch64_application_level_memory_model.fm)."
        ],
        "before": "FEAT_LSE2 introduces changes to single-copy atomicity requirements for loads and stores, and changes to alignment requirements for loads and stores."
      },
      "name": "FEAT_LSE2",
      "title": "Large System Extensions version 2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LRCPC2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LRCPC2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LRCPC2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LRCPC"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LRCPC2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LRCPC",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "These instructions are added to the A64 instruction set only.",
          "FEAT_LRCPC2 is OPTIONAL from Armv8.2.",
          "FEAT_LRCPC2 is mandatory from Armv8.4.",
          "If FEAT_LRCPC2 is implemented, then x[FEAT_LRCPC](feat:FEAT_LRCPC) is implemented.",
          "The following field identifies the presence of FEAT_LRCPC2:",
          " - AArch64-ID_AA64ISAR1_EL1.LRCPC.",
          "For more information, see:",
          " - x[Changes to single-copy atomicity in Armv8.4](#CHDDFGBI|B_the_aarch64_application_level_memory_model.fm).",
          " - x[Load-Acquire/Store-Release](#CHDHFBEC|C_a64_instruction_set_overview.fm).",
          " - x[A64 instructions that are changed in Debug state](#CACDFIBC|H_debug_state.fm)."
        ],
        "before": "FEAT_LRCPC2 provides versions of `LDAPR` and `STLR` with a 9-bit unscaled signed immediate offset."
      },
      "name": "FEAT_LRCPC2",
      "title": "Load-Acquire RCpc instructions version 2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TLBIOS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TLBIOS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TLBIOS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TLB",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_TLBIOS is OPTIONAL from Armv8.3.",
          "FEAT_TLBIOS is mandatory from Armv8.4.",
          "The following field identifies the presence of FEAT_TLBIOS:",
          " - AArch64-ID_AA64ISAR0_EL1.TLB.",
          "For more information, see x[TLB maintenance instructions](MDSec.TLB_maintenance_instructions|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_TLBIOS provides TLBI maintenance instructions that extend to the Outer Shareable domain."
      },
      "name": "FEAT_TLBIOS",
      "title": "TLB invalidate instructions in Outer Shareable domain",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TLBIRANGE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TLBIRANGE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TLBIRANGE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TLBIOS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TLBIRANGE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TLB",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_TLBIRANGE is OPTIONAL from Armv8.3.",
          "FEAT_TLBIRANGE is mandatory from Armv8.4.",
          "If FEAT_TLBIRANGE is implemented, then x[FEAT_TLBIOS](feat:FEAT_TLBIOS) is implemented.",
          "The following field identifies the presence of FEAT_TLBIRANGE:",
          " - AArch64-ID_AA64ISAR0_EL1.TLB.",
          "For more information, see:",
          " - x[TLB maintenance instructions](MDSec.TLB_maintenance_instructions|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[TLB maintenance instructions that do not apply to a range of addresses](MDSec.TLB_maintenance_instruction_that_do_not_apply_to_a_range_of_addresses|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_TLBIRANGE provides TLBI maintenance instructions that apply to a range of input addresses."
      },
      "name": "FEAT_TLBIRANGE",
      "title": "TLB invalidate range instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PCDPHINT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PCDPHINT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PCDPHINT",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_PCDPHINT is OPTIONAL from Armv9.0.",
          "The following field identifies the presence of FEAT_PCDPHINT:",
          " - AArch64-ID_AA64ISAR2_EL1.PCDPHINT."
        ],
        "before": [
          "FEAT_PCDPHINT provides hint instructions to indicate each of the following:",
          "- A store in the current execution thread is generating data at a specific location, which a thread of execution on one or more other observers is waiting on.",
          "- The thread of execution on the current PE will read a location that may not yet have been written with the value to be consumed."
        ]
      },
      "name": "FEAT_PCDPHINT",
      "title": "Producer-Consumer Data Placement Hints",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SRMASK"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap6"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SRMASK"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SRMASK"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_E2H0"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SRMASK"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SRMASK",
                      "instance": null,
                      "name": "ID_AA64MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SRMASK is OPTIONAL from Armv9.5.",
          "FEAT_SRMASK is mandatory from Armv9.6.",
          "If FEAT_SRMASK is implemented, then x[FEAT_E2H0](feat:FEAT_E2H0) is not implemented.",
          "The following field identifies the presence of FEAT_SRMASK:",
          " - AArch64-ID_AA64MMFR4_EL1.SRMASK."
        ],
        "before": "FEAT_SRMASK introduces aliases and bitwise write masks for EL1 control registers to reduce trapping of EL1 System register accesses to EL2. The equivalent bitwise write masks are also present for EL2."
      },
      "name": "FEAT_SRMASK",
      "title": "Bitwise System Register Write Masks",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap6"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_IDTE3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_IDTE3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap0"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL3"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_IDTE3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "IDS",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "In an Armv9.6 implementation, if x[FEAT_EL3](feat:FEAT_EL3) is implemented, FEAT_IDTE3 is implemented.",
          "FEAT_IDTE3 is OPTIONAL from Armv9.0.",
          "The following field identifies the presence of FEAT_IDTE3:",
          " - AArch64-ID_AA64MMFR2_EL1.IDS."
        ],
        "before": "FEAT_IDTE3 introduces support for trapping ID register accesses to EL3."
      },
      "name": "FEAT_IDTE3",
      "title": "Trapping ID register accesses to EL3",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_UINJ"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap6"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_UINJ"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_UINJ"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "UINJ",
                      "instance": null,
                      "name": "ID_AA64PFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_UINJ is OPTIONAL from Armv9.0.",
          "FEAT_UINJ is mandatory from Armv9.6.",
          "The following field identifies the presence of FEAT_UINJ:",
          " - AArch64-ID_AA64PFR2_EL1.UINJ."
        ],
        "before": "FEAT_UINJ introduces support for software injection of Undefined Instruction exceptions."
      },
      "name": "FEAT_UINJ",
      "title": "Injection of Undefined Instruction exceptions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TTL"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TTL"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TTL"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TTL",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_TTL is OPTIONAL from Armv8.3.",
          "FEAT_TTL is mandatory from Armv8.4.",
          "The following field identifies the presence of FEAT_TTL:",
          " - AArch64-ID_AA64MMFR2_EL1.TTL.",
          "For more information, see:",
          " - x[TLB maintenance instructions](MDSec.TLB_maintenance_instructions|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[TLB maintenance instructions that do not apply to a range of addresses](MDSec.TLB_maintenance_instruction_that_do_not_apply_to_a_range_of_addresses|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_TTL provides the TTL field to indicate the level of translation table walk holding the leaf entry for the address that is being invalidated. This field is provided in all TLB maintenance instructions that take a VA or an IPA argument."
      },
      "name": "FEAT_TTL",
      "title": "Translation Table Level",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_BBML1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_BBML1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "BBM",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_BBML1 is OPTIONAL from Armv8.3.",
          "The following field identifies the presence of FEAT_BBML1:",
          " - AArch64-ID_AA64MMFR2_EL1.BBM.",
          "For more information, see:",
          "- x[Block descriptor and Page descriptor formats](#MDSec.Block_descriptor_and_page_descriptor_formats|D_the_aarch64_virtual_memory_system_architecture.fm).",
          "- x[Block translation entry](#MDSec.Block_translation_entry|D_the_aarch64_virtual_memory_system_architecture.fm).",
          "- x[Support levels for changing block size](#MDSec.Support_levels_for_changing_block_size|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_BBML1 provides support for reducing the requirements for following a break-before-make sequence when changing between table or block sizes for a translation."
      },
      "name": "FEAT_BBML1",
      "title": "Translation table break-before-make level 1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_BBML2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_BBML2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_BBML1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_BBML2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "BBM",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_BBML2 is OPTIONAL from Armv8.3.",
          "If FEAT_BBML2 is implemented, then x[FEAT_BBML1](feat:FEAT_BBML1) is implemented.",
          "The following field identifies the presence of FEAT_BBML2:",
          " - AArch64-ID_AA64MMFR2_EL1.BBM.",
          "For more information, see x[FEAT_BBML1](#FEAT_BBML1)."
        ],
        "before": "FEAT_BBML2 provides support for further reducing the requirements for following a break-before-make sequences when changing between table or block sizes for a translation."
      },
      "name": "FEAT_BBML2",
      "title": "Translation table break-before-make level 2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RASv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap4"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_RAS"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_RASv1p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RASv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_RAS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RASv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_RASSAv1p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RASv1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "RAS",
                        "instance": null,
                        "name": "ID_AA64PFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 2
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "RAS",
                          "instance": null,
                          "name": "ID_AA64PFR0_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": "==",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 1
                  }
                },
                "op": "&&",
                "right": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "RAS_frac",
                          "instance": null,
                          "name": "ID_AA64PFR1_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": ">=",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 1
                  }
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RASv1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "RAS",
                        "instance": null,
                        "name": "ID_PFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 2
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "RAS",
                          "instance": null,
                          "name": "ID_PFR0_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": "==",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 1
                  }
                },
                "op": "&&",
                "right": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "RAS_frac",
                          "instance": null,
                          "name": "ID_PFR2_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": ">=",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 1
                  }
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RASv1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "RAS",
                        "instance": null,
                        "name": "ID_PFR0",
                        "slices": null,
                        "state": "AArch32"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 2
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "RAS",
                          "instance": null,
                          "name": "ID_PFR0",
                          "slices": null,
                          "state": "AArch32"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": "==",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 1
                  }
                },
                "op": "&&",
                "right": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "RAS_frac",
                          "instance": null,
                          "name": "ID_PFR2",
                          "slices": null,
                          "state": "AArch32"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": ">=",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 1
                  }
                }
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_RASv1p1 is OPTIONAL from Armv8.2.",
          "In an Armv8.4 implementation, if x[FEAT_RAS](feat:FEAT_RAS) is implemented, FEAT_RASv1p1 is implemented.",
          "If FEAT_RASv1p1 is implemented, then x[FEAT_RAS](feat:FEAT_RAS) is implemented.",
          "If FEAT_RASv1p1 is implemented, then FEAT_RASSAv1p1 is implemented.",
          "The following fields identify the presence of FEAT_RASv1p1:",
          " - AArch64-ID_AA64PFR0_EL1.RAS.",
          " - AArch64-ID_AA64PFR1_EL1.RAS_frac.",
          " - AArch64-ID_PFR0_EL1.RAS.",
          " - AArch64-ID_PFR2_EL1.RAS_frac.",
          " - AArch32-ID_PFR0.RAS.",
          " - AArch32-ID_PFR2.RAS_frac.",
          "For more information, see *Arm^®^ Reliability Availability and Serviceability (RAS) System Architecture, for A-profile architecture* (ARM IHI 0100)."
        ],
        "before": [
          "FEAT_RASv1p1 introduces support for System register access to the following RAS System Architecture v1.1 features:",
          " - Additional ERR&lt;n&gt;MISC&lt;m&gt; registers.",
          " - The optional RAS Common Fault Injection Model Extension."
        ]
      },
      "name": "FEAT_RASv1p1",
      "title": "RAS extension v1.1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_DoubleFault"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap4"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_DoubleFault"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_DoubleFault"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_DoubleFault2"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL3"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL3"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_DoubleFault"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RAS",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_DoubleFault is OPTIONAL from Armv8.3.",
          "In an Armv8.4 implementation, if x[FEAT_AA64EL3](feat:FEAT_AA64EL3) is implemented, FEAT_DoubleFault is implemented.",
          "If FEAT_DoubleFault is implemented, then x[FEAT_DoubleFault2](feat:FEAT_DoubleFault2) or x[FEAT_AA64EL3](feat:FEAT_AA64EL3) is implemented.",
          "The following field identifies the presence of FEAT_DoubleFault:",
          " - AArch64-ID_AA64PFR0_EL1.RAS.",
          "For more information, see:",
          " - x[Taking error exceptions](#MDSec.taking_error_exceptions|D_ras_pe_architecture.fm).",
          " - x[Error synchronization event](#MDSec.error_synchronization_event|D_ras_pe_architecture.fm)."
        ],
        "before": "FEAT_DoubleFault provides controls for routing and masking error exceptions."
      },
      "name": "FEAT_DoubleFault",
      "title": "Double Fault Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SEL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p4"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CopDbg",
                      "instance": null,
                      "name": "ID_DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 9
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p4"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DebugVer",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 9
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p4"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "Version",
                      "instance": null,
                      "name": "DBGDIDR",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 9
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p4"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CopDbg",
                      "instance": null,
                      "name": "ID_DFR0",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 9
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p4"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "ARCHVER",
                    "instance": null,
                    "name": "EDDEVARCH",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 9
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_Debugv8p4 is OPTIONAL from Armv8.3.",
          "FEAT_Debugv8p4 is mandatory from Armv8.4.",
          "If FEAT_Debugv8p4 is implemented, then x[FEAT_Debugv8p2](feat:FEAT_Debugv8p2) is implemented.",
          "If x[FEAT_SEL2](feat:FEAT_SEL2) is implemented, then FEAT_Debugv8p4 is implemented.",
          "The following fields identify the presence of FEAT_Debugv8p4:",
          " - AArch64-ID_DFR0_EL1.CopDbg.",
          " - AArch64-ID_AA64DFR0_EL1.DebugVer.",
          " - AArch32-DBGDIDR.Version.",
          " - AArch32-ID_DFR0.CopDbg.",
          " - ext-EDDEVARCH.ARCHVER.",
          "For more information, see:",
          " - [Definition and constraints of a debugger in the context of external debug](#CHDCHAAG).",
          " - [External debug interface register access permissions](#H8CIHIIJJJ)."
        ],
        "before": [
          "FEAT_Debugv8p4 provides the following mandatory changes:",
          " - The fields x[MDCR_EL3](AArch64.mdcr_el3|D_aarch64_system_register_descriptions.fm).{EPMAD, EDAD} control Non-secure access to the debug and PMU registers. The bus Requester is responsible for other debug authentication.",
          " - The Software Lock is obsolete.",
          " - Non-invasive Debug controls are relaxed.",
          " - Secure and Non-secure views of the debug registers are enabled."
        ]
      },
      "name": "FEAT_Debugv8p4",
      "title": "Debug v8.4",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CNTSC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CNTSC"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "CNTSC",
                    "instance": null,
                    "name": "CNTID",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 1
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_CNTSC is OPTIONAL from Armv8.3.",
          "The following field identifies the presence of FEAT_CNTSC:",
          " - ext-CNTID.CNTSC.",
          "For more information, see x[CNTCR](#ext.cntcr|I_external_system_control_register_descriptions.fm)."
        ],
        "before": "FEAT_CNTSC introduces a scaling register to the memory-mapped counter module that allows the frequency of the counter that is generated to be scaled from the basic frequency reported in the counter ID mechanisms."
      },
      "name": "FEAT_CNTSC",
      "title": "Generic Counter Scaling",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_NV2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_NV2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_NV"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_NV2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "NV_frac",
                          "instance": null,
                          "name": "ID_AA64MMFR4_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": ">=",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 1
                  }
                },
                "op": "&&",
                "right": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "NV",
                          "instance": null,
                          "name": "ID_AA64MMFR2_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": "==",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 0
                  }
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "NV",
                        "instance": null,
                        "name": "ID_AA64MMFR2_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 2
                }
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_NV2 is OPTIONAL from Armv8.3.",
          "If FEAT_NV2 is implemented, then x[FEAT_NV](feat:FEAT_NV) is implemented.",
          "The following fields identify the presence of FEAT_NV2:",
          " - AArch64-ID_AA64MMFR4_EL1.NV_frac.",
          " - AArch64-ID_AA64MMFR2_EL1.NV.",
          "For more information, see x[Enhanced support for nested virtualization](#MDSec.Enhanced_support_for_nested_virtualization|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_NV2 supports nested virtualization by redirecting register accesses that would be trapped to EL1 and EL2 to access memory instead. The address of the memory access depends on information held in x[VNCR_EL2](#AArch64.vncr_el2|D_aarch64_system_register_descriptions.fm)."
      },
      "name": "FEAT_NV2",
      "title": "Enhanced nested virtualization support",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_NV2p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v9Ap6"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_NV"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_NV2p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_NV2p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_NV2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_NV2p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "NV_frac",
                      "instance": null,
                      "name": "ID_AA64MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_NV2p1 is OPTIONAL from Armv8.4.",
          "In an Armv9.6 implementation, if x[FEAT_NV](feat:FEAT_NV) is implemented, FEAT_NV2p1 is implemented.",
          "If FEAT_NV2p1 is implemented, then x[FEAT_NV2](feat:FEAT_NV2) is implemented.",
          "The following field identifies the presence of FEAT_NV2p1:",
          " - AArch64-ID_AA64MMFR4_EL1.NV_frac."
        ],
        "before": "FEAT_NV2p1 further supports nested virtualization by ensuring that control bits in EL1 registers are stateful if the corresponding bits in the corresponding EL2 registers are stateful. This is to prevent loss of the Guest hypervisor's state, and to permit the Host hypervisor to correctly emulate the EL2 environment."
      },
      "name": "FEAT_NV2p1",
      "title": "Enhanced nested virtualization support",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LSUI"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap6"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LSUI"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LSUI"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LSUI",
                      "instance": null,
                      "name": "ID_AA64ISAR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_LSUI is OPTIONAL from Armv9.5.",
          "FEAT_LSUI is mandatory from Armv9.6.",
          "The following field identifies the presence of FEAT_LSUI:",
          " - AArch64-ID_AA64ISAR3_EL1.LSUI."
        ],
        "before": "FEAT_LSUI introduces unprivileged variants of load and store instructions so that clearing PSTATE.PAN is never required in privileged software."
      },
      "name": "FEAT_LSUI",
      "title": "Unprivileged Load Store",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap4"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p4"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PMUVer",
                        "instance": null,
                        "name": "ID_AA64DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 5
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PMUVer",
                        "instance": null,
                        "name": "ID_AA64DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p4"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 5
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p4"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0",
                        "slices": null,
                        "state": "AArch32"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 5
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0",
                        "slices": null,
                        "state": "AArch32"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p4"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMUVer",
                      "instance": null,
                      "name": "EDDFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 5
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMUVer",
                      "instance": null,
                      "name": "EDDFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "<",
              "right": {
                "_type": "AST.Integer",
                "value": 15
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_PMUv3p4 is OPTIONAL from Armv8.3.",
          "In an Armv8.4 implementation, if x[FEAT_PMUv3](feat:FEAT_PMUv3) is implemented, FEAT_PMUv3p4 is implemented.",
          "If FEAT_PMUv3p4 is implemented, then x[FEAT_PMUv3p1](feat:FEAT_PMUv3p1) is implemented.",
          "The following fields identify the presence of FEAT_PMUv3p4:",
          " - AArch64-ID_AA64DFR0_EL1.PMUVer.",
          " - AArch64-ID_DFR0_EL1.PerfMon.",
          " - AArch32-ID_DFR0.PerfMon.",
          " - ext-EDDFR.PMUVer.",
          "For more information, see [PMU Event Descriptions](#chap.event_descriptions)."
        ],
        "before": [
          "FEAT_PMUv3p4 introduces:",
          " - x[PMMIR_EL1](#AArch64.pmmir_el1|D_aarch64_system_register_descriptions.fm)",
          " - x[PMMIR](#AArch32.pmmir|G_aarch32_system_register_descriptions.fm) registers."
        ]
      },
      "name": "FEAT_PMUv3p4",
      "title": "Armv8.4 PMU extensions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRF"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap4"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETMv4"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRF"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRF"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRC_SR"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRF"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TraceFilt",
                      "instance": null,
                      "name": "ID_DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRF"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TraceFilt",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRF"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TraceFilt",
                      "instance": null,
                      "name": "ID_DFR0",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRF"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRC_EXT"
            }
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "TraceFilt",
                    "instance": null,
                    "name": "EDDFR",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 1
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_TRF is OPTIONAL from Armv8.3.",
          "In an Armv8.4 implementation, if x[FEAT_ETMv4](feat:FEAT_ETMv4) is implemented, FEAT_TRF is implemented.",
          "If FEAT_TRF is implemented, then x[FEAT_TRC_SR](feat:FEAT_TRC_SR) is implemented.",
          "The following fields identify the presence of FEAT_TRF:",
          " - AArch64-ID_DFR0_EL1.TraceFilt.",
          " - AArch64-ID_AA64DFR0_EL1.TraceFilt.",
          " - AArch32-ID_DFR0.TraceFilt.",
          " - ext-EDDFR.TraceFilt.",
          "For more information on FEAT_TRF, see:",
          " - x[AArch64 Self-hosted Trace](#BABBDIGF|D_aarch64_self_hosted_trace.fm).",
          " - x[AArch32 Self-hosted Trace](#BABCGGEI|G_aarch32_self_hosted_trace.fm)."
        ],
        "before": [
          "FEAT_TRF introduces control of trace in a self-hosted system through System registers.",
          "The feature provides:",
          [
            " - Control of Exception levels and Security states where trace generation is prohibited.",
            " - Control of whether an offset is used for the timestamp recorded with trace information.",
            " - A context synchronization instruction, TSB CSYNC, that can be used to prevent reordering of trace operation accesses with respect to other accesses of the same System registers."
          ]
        ]
      },
      "name": "FEAT_TRF",
      "title": "Self-hosted Trace extensions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TTST"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SEL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TTST"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TTST"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ST",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_TTST is OPTIONAL from Armv8.3.",
          "If x[FEAT_SEL2](feat:FEAT_SEL2) is implemented, then FEAT_TTST is implemented.",
          "The following field identifies the presence of FEAT_TTST:",
          " - AArch64-ID_AA64MMFR2_EL1.ST.",
          "For more information, see:",
          " - x[Input address size configuration](#MDSec.Input_address_size_configuration|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Translation using the 4KB granule](#MDSec.Translation_using_the_4KB_granule|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Translation using the 16KB granule](#MDSec.Translation_using_the_16KB_granule|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Translation using the 64KB granule](#MDSec.Translation_using_the_64KB_granule|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_TTST relaxes the lower limit on the size of translation tables, by increasing the maximum permitted value of the T1SZ and T0SZ fields in x[TCR_EL1](#AArch64.tcr_el1|D_aarch64_system_register_descriptions.fm), x[TCR_EL2](#AArch64.tcr_el2|D_aarch64_system_register_descriptions.fm), x[TCR_EL3](#AArch64.tcr_el3|D_aarch64_system_register_descriptions.fm), x[VTCR_EL2](#AArch64.vtcr_el2|D_aarch64_system_register_descriptions.fm) and x[VSTCR_EL2](#AArch64.vstcr_el2|D_aarch64_system_register_descriptions.fm)."
      },
      "name": "FEAT_TTST",
      "title": "Small translation tables",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMUv1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AMUv1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AMU",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AMUv1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AMU",
                      "instance": null,
                      "name": "ID_PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AMUv1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AMU",
                      "instance": null,
                      "name": "ID_PFR0",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMU_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AMUv1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AMU",
                      "instance": null,
                      "name": "EDPFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_AMUv1 is OPTIONAL from Armv8.3.",
          "The following fields identify the presence of FEAT_AMUv1:",
          " - AArch64-ID_AA64PFR0_EL1.AMU.",
          " - AArch64-ID_PFR0_EL1.AMU.",
          " - AArch32-ID_PFR0.AMU.",
          " - ext-EDPFR.AMU.",
          "For more information, see x[The Activity Monitors Extension](#BABHBBIF|D_the_activity_monitors_extension.fm)."
        ],
        "before": "FEAT_AMUv1 provides a function similar to a subset of the existing Performance Monitors Extension functionality, intended for system management use rather than debugging and profiling."
      },
      "name": "FEAT_AMUv1",
      "title": "Activity Monitors Extension version 1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The Armv8.2 architecture extension is an extension to Armv8.1. It adds mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv8.2 compliant if all of the following apply:",
          "- It is Armv8.1 compliant.",
          " - It includes all of the Armv8.2 architectural features that are mandatory.",
          "An Armv8.2 compliant implementation can additionally include:",
          " - Armv8.2 features that are optional.",
          "- Any arbitrary subset of the architectural features of Armv8.3, subject only to those constraints that require that certain features be implemented together."
        ]
      },
      "name": "v8Ap2",
      "title": "The Armv8.2 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_PACQARMA5"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_PACIMP"
              }
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PACQARMA3"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_PAuth is OPTIONAL from Armv8.2.",
          "FEAT_PAuth is mandatory from Armv8.3.",
          "If FEAT_PAuth is implemented, then x[FEAT_PACQARMA5](feat:FEAT_PACQARMA5), x[FEAT_PACIMP](feat:FEAT_PACIMP), or x[FEAT_PACQARMA3](feat:FEAT_PACQARMA3) is implemented.",
          "For more information, see x[Pointer authentication](#MDSec.Pointer_authentication|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": [
          "FEAT_PAuth introduces functionality that supports address authentication of the contents of a register before that register is used as the target of an indirect branch, or as a load.",
          "When FEAT_PAuth is implemented, all of the following must be true:",
          " - Exactly one of the PAC algorithms is implemented.",
          " - The x[PACGA](#A64.instructions.PACGA|C_a64_base_instruction_descriptions.fm) instruction and other Pointer authentication instructions use the same algorithm.",
          "The PAC algorithm features are:",
          " - x[FEAT_PACQARMA5](FEAT_PACQARMA5|A_armv8_architecture_extensions.fm).",
          " - x[FEAT_PACIMP](FEAT_PACIMP|A_armv8_architecture_extensions.fm).",
          " - x[FEAT_PACQARMA3](FEAT_PACQARMA3|A_armv8_architecture_extensions.fm)."
        ]
      },
      "name": "FEAT_PAuth",
      "title": "Pointer authentication",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_JSCVT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap3"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_JSCVT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_JSCVT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_JSCVT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "JSCVT",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_JSCVT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "JSCVT",
                      "instance": null,
                      "name": "ID_ISAR6_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_JSCVT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "JSCVT",
                      "instance": null,
                      "name": "ID_ISAR6",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "These instructions are added to the A64 and A32/T32 instruction sets.",
          "FEAT_JSCVT is OPTIONAL from Armv8.2.",
          "In an Armv8.3 implementation, if x[FEAT_FP](feat:FEAT_FP) is implemented, FEAT_JSCVT is implemented.",
          "If FEAT_JSCVT is implemented, then x[FEAT_FP](feat:FEAT_FP) is implemented.",
          "The following fields identify the presence of FEAT_JSCVT:",
          " - AArch64-ID_AA64ISAR1_EL1.JSCVT.",
          " - AArch64-ID_ISAR6_EL1.JSCVT.",
          " - AArch32-ID_ISAR6.JSCVT.",
          "For more information, see:",
          " - [Floating-point conversion](#CHDGHEIE).",
          " - [About the A64 Advanced SIMD and floating-point instructions](#about_advsimd_fp_instructions).",
          " - [Advanced SIMD and floating-point instructions](#CFIEAFEB).",
          " - [Floating-point data-processing instructions](#BABBGCFA)."
        ],
        "before": "FEAT_JSCVT introduces JavaScript convert instructions that truncate a double-precision value to a 32-bit signed integer, setting the condition flags to indicate whether the converted value was in range."
      },
      "name": "FEAT_JSCVT",
      "title": "JavaScript conversion instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LRCPC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LRCPC"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LRCPC"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LRCPC",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "These instructions are added to the A64 instruction set only.",
          "FEAT_LRCPC is OPTIONAL from Armv8.2.",
          "FEAT_LRCPC is mandatory from Armv8.3.",
          "The following field identifies the presence of FEAT_LRCPC:",
          " - AArch64-ID_AA64ISAR1_EL1.LRCPC.",
          "For more information, see:",
          " - x[Load-Acquire, Load-AcquirePC, and Store-Release](#BEIHCHEF|B_the_aarch64_application_level_memory_model.fm).",
          " - x[Load-Acquire/Store-Release](#CHDHFBEC|C_a64_instruction_set_overview.fm)."
        ],
        "before": "FEAT_LRCPC introduces instructions that support the weaker <i>Release Consistency processor consistent</i> (RCpc) model that enables the reordering of a Store-Release followed by a Load-Acquire to a different address."
      },
      "name": "FEAT_LRCPC",
      "title": "Load-Acquire RCpc instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FCMA"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap3"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FCMA"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FCMA"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FCMA"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FCMA",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FCMA"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "VCMA",
                      "instance": null,
                      "name": "ID_ISAR5_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FCMA"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "VCMA",
                      "instance": null,
                      "name": "ID_ISAR5",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "These instructions are added to the A64 and A32/T32 instruction sets.",
          "FEAT_FCMA is OPTIONAL from Armv8.2.",
          "In an Armv8.3 implementation, if x[FEAT_FP](feat:FEAT_FP) is implemented, FEAT_FCMA is implemented.",
          "If FEAT_FCMA is implemented, then x[FEAT_FP](feat:FEAT_FP) is implemented.",
          "The following fields identify the presence of FEAT_FCMA:",
          " - AArch64-ID_AA64ISAR1_EL1.FCMA.",
          " - AArch64-ID_ISAR5_EL1.VCMA.",
          " - AArch32-ID_ISAR5.VCMA.",
          "For more information, see:",
          " - [AArch64 Advanced SIMD complex number arithmetic instructions](#AA64_simd_comp_num_arithmetic).",
          " - [AArch32 Advanced SIMD complex number arithmetic instructions](#AA32_simd_comp_num_arithmetic)."
        ],
        "before": "FEAT_FCMA introduces instructions for floating-point multiplication and addition of complex numbers."
      },
      "name": "FEAT_FCMA",
      "title": "Floating-point complex number instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CCIDX"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CCIDX"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CCIDX",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CCIDX"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CCIDX",
                      "instance": null,
                      "name": "ID_MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CCIDX"
            },
            "op": "==>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CCIDX",
                      "instance": null,
                      "name": "ID_MMFR4",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_CCIDX is OPTIONAL from Armv8.2.",
          "The following fields identify the presence of FEAT_CCIDX:",
          " - AArch64-ID_AA64MMFR2_EL1.CCIDX.",
          " - AArch64-ID_MMFR4_EL1.CCIDX.",
          " - AArch32-ID_MMFR4.CCIDX.",
          "For more information, see:",
          "- x[Possible formats of the Cache Size Identification Register, CCSIDR_EL1](#CHDEIEHJ|D_the_aarch64_system_level_memory_model.fm).",
          "- x[Possible formats of the Cache Size Identification Register, CCSIDR and CCSIDR2](#CHDFFHAE|G_the_aarch32_system_level_memory_model.fm)."
        ],
        "before": [
          "FEAT_CCIDX introduces the following registers to allow caches to be described with greater numbers of sets and greater associativity:",
          " - A 64-bit format of x[CCSIDR_EL1](#AArch64.ccsidr_el1|D_aarch64_system_register_descriptions.fm).",
          " - x[CCSIDR2_EL1](#AArch64.ccsidr2_el1|D_aarch64_system_register_descriptions.fm).",
          " - x[CCSIDR2](#AArch32.ccsidr2|G_aarch32_system_register_descriptions.fm)."
        ]
      },
      "name": "FEAT_CCIDX",
      "title": "Extended cache index",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_NV"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_NV"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_NV"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "NV_frac",
                          "instance": null,
                          "name": "ID_AA64MMFR4_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": ">=",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 1
                  }
                },
                "op": "&&",
                "right": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "NV",
                          "instance": null,
                          "name": "ID_AA64MMFR2_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": "==",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 0
                  }
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "NV",
                        "instance": null,
                        "name": "ID_AA64MMFR2_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 1
                }
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_NV is OPTIONAL from Armv8.2.",
          "If FEAT_NV is implemented, then x[FEAT_EL2](feat:FEAT_EL2) is implemented.",
          "The following fields identify the presence of FEAT_NV:",
          " - AArch64-ID_AA64MMFR4_EL1.NV_frac.",
          " - AArch64-ID_AA64MMFR2_EL1.NV.",
          "For more information, see x[Nested virtualization](#MDSec.Nested_virtualization|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_NV provides support for a Guest Hypervisor to run in EL1 and ensures that the Guest Hypervisor is unaware that it is running at that Exception level. A Guest Hypervisor is supported regardless of the Effective value of x[HCR_EL2](#AArch64.hcr_el2|D_aarch64_system_register_descriptions.fm).E2H."
      },
      "name": "FEAT_NV",
      "title": "Nested Virtualization",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap5"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPEv1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPEv1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMSVer",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPEv1p1 is OPTIONAL from Armv8.2.",
          "In an Armv8.5 implementation, if x[FEAT_SPE](feat:FEAT_SPE) is implemented, FEAT_SPEv1p1 is implemented.",
          "If FEAT_SPEv1p1 is implemented, then x[FEAT_SPE](feat:FEAT_SPE) is implemented.",
          "The following field identifies the presence of FEAT_SPEv1p1:",
          " - AArch64-ID_AA64DFR0_EL1.PMSVer.",
          "An implementation that includes FEAT_SVE and the Statistical Profiling Extension is strongly recommended to implement FEAT_SPEv1p1 whenever possible.",
          "For more information, see:",
          " - x[The Statistical Profiling Extension](#BABHHFEG|A_armv8_architecture_extensions.fm).",
          " - x[Statistical Profiling Extension Sample Record Specification](#SPEPROTO|D_statistical_profiling_sample_records.fm)."
        ],
        "before": [
          "FEAT_SPEv1p1 introduces the following to the Statistical Profiling Extension:",
          " - Support for an Alignment Flag in the Events packet and filtering on this event using PMSEVFR_EL1.",
          " - Support for the profiling of Scalable Vector Extension operations."
        ]
      },
      "name": "FEAT_SPEv1p1",
      "title": "Statistical Profiling Extension version 1.1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PACQARMA3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PACQARMA3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PACQARMA3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_PACQARMA5"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PACQARMA3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_PACIMP"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PACQARMA3"
            },
            "op": "==>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PACM",
                      "instance": null,
                      "name": "ID_AA64ISAR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "!=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PACQARMA3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "GPA3",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PACQARMA3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "APA3",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_PACQARMA3 is OPTIONAL from Armv8.2.",
          "If FEAT_PACQARMA3 is implemented, then x[FEAT_PAuth](feat:FEAT_PAuth) is implemented.",
          "If FEAT_PACQARMA3 is implemented, then x[FEAT_PACQARMA5](feat:FEAT_PACQARMA5) is not implemented.",
          "If FEAT_PACQARMA3 is implemented, then x[FEAT_PACIMP](feat:FEAT_PACIMP) is not implemented.",
          "The following fields identify the presence of FEAT_PACQARMA3:",
          " - AArch64-ID_AA64ISAR3_EL1.PACM.",
          " - AArch64-ID_AA64ISAR2_EL1.GPA3.",
          " - AArch64-ID_AA64ISAR2_EL1.APA3.",
          "For more information, see x[Pointer authentication](#MDSec.Pointer_authentication|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_PACQARMA3 introduces the QARMA3 cryptographic algorithm for PAC calculation."
      },
      "name": "FEAT_PACQARMA3",
      "title": "Pointer authentication - QARMA3 algorithm",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PACQARMA5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PACQARMA5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PACQARMA5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_PACQARMA3"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PACQARMA5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_PACIMP"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PACQARMA5"
            },
            "op": "==>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PACM",
                      "instance": null,
                      "name": "ID_AA64ISAR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "!=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PACQARMA5"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "GPA",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PACQARMA5"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "APA",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_PACQARMA5 is OPTIONAL from Armv8.2.",
          "If FEAT_PACQARMA5 is implemented, then x[FEAT_PAuth](feat:FEAT_PAuth) is implemented.",
          "If FEAT_PACQARMA5 is implemented, then x[FEAT_PACQARMA3](feat:FEAT_PACQARMA3) is not implemented.",
          "If FEAT_PACQARMA5 is implemented, then x[FEAT_PACIMP](feat:FEAT_PACIMP) is not implemented.",
          "The following fields identify the presence of FEAT_PACQARMA5:",
          " - AArch64-ID_AA64ISAR3_EL1.PACM.",
          " - AArch64-ID_AA64ISAR1_EL1.GPA.",
          " - AArch64-ID_AA64ISAR1_EL1.APA.",
          "For more information, see x[Pointer authentication](#MDSec.Pointer_authentication|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_PACQARMA5 introduces the QARMA5 cryptographic algorithm for PAC calculation."
      },
      "name": "FEAT_PACQARMA5",
      "title": "Pointer authentication - QARMA5 algorithm",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PACIMP"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PACIMP"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PACIMP"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_PACQARMA5"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PACIMP"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_PACQARMA3"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PACIMP"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "GPI",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PACIMP"
            },
            "op": "==>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "API",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_PACIMP is OPTIONAL from Armv8.2.",
          "If FEAT_PACIMP is implemented, then x[FEAT_PAuth](feat:FEAT_PAuth) is implemented.",
          "If FEAT_PACIMP is implemented, then x[FEAT_PACQARMA5](feat:FEAT_PACQARMA5) is not implemented.",
          "If FEAT_PACIMP is implemented, then x[FEAT_PACQARMA3](feat:FEAT_PACQARMA3) is not implemented.",
          "The following fields identify the presence of FEAT_PACIMP:",
          " - AArch64-ID_AA64ISAR1_EL1.GPI.",
          " - AArch64-ID_AA64ISAR1_EL1.API.",
          "For more information, see x[Pointer authentication](#MDSec.Pointer_authentication|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_PACIMP permits an IMPLEMENTATION DEFINED cryptographic algorithm to be used for PAC calculation."
      },
      "name": "FEAT_PACIMP",
      "title": "Pointer authentication - IMPLEMENTATION DEFINED algorithm",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EPAC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EPAC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EPAC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_PAuth2"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_EPAC"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "APA",
                          "instance": null,
                          "name": "ID_AA64ISAR1_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": "==",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 2
                  }
                },
                "op": "||",
                "right": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "API",
                          "instance": null,
                          "name": "ID_AA64ISAR1_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": "==",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 2
                  }
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "APA3",
                        "instance": null,
                        "name": "ID_AA64ISAR2_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "==",
                "right": {
                  "_type": "AST.Integer",
                  "value": 2
                }
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_EPAC is OPTIONAL from Armv8.2.",
          "If FEAT_EPAC is implemented, then x[FEAT_PAuth](feat:FEAT_PAuth) is implemented.",
          "If FEAT_EPAC is implemented, then x[FEAT_PAuth2](feat:FEAT_PAuth2) is not implemented.",
          "The following fields identify the presence of FEAT_EPAC:",
          " - AArch64-ID_AA64ISAR1_EL1.APA.",
          " - AArch64-ID_AA64ISAR1_EL1.API.",
          " - AArch64-ID_AA64ISAR2_EL1.APA3.",
          "For more information, see x[Pointer authentication](#MDSec.Pointer_authentication|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": [
          "FEAT_EPAC introduces functionality that permits setting the <i>Pointer Authentication Code</i> (PAC) field to 0 on performing a PAC operation on a non-canonical address.",
          "Arm deprecates implementation of this feature."
        ]
      },
      "name": "FEAT_EPAC",
      "title": "Enhanced pointer authentication",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FPAC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FPAC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FPAC"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "APA",
                          "instance": null,
                          "name": "ID_AA64ISAR1_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": ">=",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 4
                  }
                },
                "op": "||",
                "right": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "API",
                          "instance": null,
                          "name": "ID_AA64ISAR1_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": ">=",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 4
                  }
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "APA3",
                        "instance": null,
                        "name": "ID_AA64ISAR2_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 4
                }
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_FPAC is OPTIONAL from Armv8.2.",
          "If FEAT_FPAC is implemented, then x[FEAT_PAuth2](feat:FEAT_PAuth2) is implemented.",
          "The following fields identify the presence of FEAT_FPAC:",
          " - AArch64-ID_AA64ISAR1_EL1.APA.",
          " - AArch64-ID_AA64ISAR1_EL1.API.",
          " - AArch64-ID_AA64ISAR2_EL1.APA3.",
          "For more information, see x[Faulting on pointer authentication](#MDSec.Faulting_on_pointer_authentication|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": [
          "FEAT_FPAC introduces faulting on an AUT* instruction.",
          "FEAT_FPAC is added as a further extension to x[FEAT_PAuth2](FEAT_PAuth2|A_armv8_architecture_extensions.fm)."
        ]
      },
      "name": "FEAT_FPAC",
      "title": "Faulting on AUT* instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FPACC_SPEC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FPACC_SPEC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FPACCOMBINE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FPACC_SPEC"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "Spec_FPACC",
                      "instance": null,
                      "name": "ID_AA64MMFR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_FPACC_SPEC is OPTIONAL from Armv8.2.",
          "If FEAT_FPACC_SPEC is implemented, then x[FEAT_FPACCOMBINE](feat:FEAT_FPACCOMBINE) is implemented.",
          "The following field identifies the presence of FEAT_FPACC_SPEC:",
          " - AArch64-ID_AA64MMFR3_EL1.Spec_FPACC.",
          "For more information, see x[Faulting on pointer authentication](#MDSec.Faulting_on_pointer_authentication|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": [
          "FEAT_FPACC_SPEC introduces consistent impact of speculation for instructions that perform authentication.",
          "FEAT_FPACC_SPEC is added as a further extension to FEAT_FPACCOMBINE."
        ]
      },
      "name": "FEAT_FPACC_SPEC",
      "title": "Speculative behavior of pointer authentication instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FPACCOMBINE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FPACCOMBINE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FPAC"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FPACCOMBINE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "APA",
                          "instance": null,
                          "name": "ID_AA64ISAR1_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": ">=",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 5
                  }
                },
                "op": "||",
                "right": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "API",
                          "instance": null,
                          "name": "ID_AA64ISAR1_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": ">=",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 5
                  }
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "APA3",
                        "instance": null,
                        "name": "ID_AA64ISAR2_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 5
                }
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_FPACCOMBINE is OPTIONAL from Armv8.2.",
          "If FEAT_FPACCOMBINE is implemented, then x[FEAT_FPAC](feat:FEAT_FPAC) is implemented.",
          "The following fields identify the presence of FEAT_FPACCOMBINE:",
          " - AArch64-ID_AA64ISAR1_EL1.APA.",
          " - AArch64-ID_AA64ISAR1_EL1.API.",
          " - AArch64-ID_AA64ISAR2_EL1.APA3.",
          "For more information, see x[Faulting on pointer authentication](#MDSec.Faulting_on_pointer_authentication|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": [
          "FEAT_FPACCOMBINE introduces faulting on the combined instructions that perform pointer authentication.",
          "FEAT_FPACCOMBINE is added as a further extension to FEAT_FPAC."
        ]
      },
      "name": "FEAT_FPACCOMBINE",
      "title": "Faulting on combined pointer authentication instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CONSTPACFIELD"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CONSTPACFIELD"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CONSTPACFIELD"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PAC_frac",
                      "instance": null,
                      "name": "ID_AA64ISAR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "==",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_CONSTPACFIELD is OPTIONAL from Armv8.2.",
          "If FEAT_CONSTPACFIELD is implemented, then x[FEAT_PAuth2](feat:FEAT_PAuth2) is implemented.",
          "The following field identifies the presence of FEAT_CONSTPACFIELD:",
          " - AArch64-ID_AA64ISAR2_EL1.PAC_frac.",
          "For more information, see x[PAC field](#MDSec.PAC_field|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_CONSTPACFIELD introduces functionality that permits an implementation with pointer authentication to use the value of bit[55] in the virtual address to determine the size of the PAC field when adding a PAC to the virtual address, even when the top byte is not being ignored."
      },
      "name": "FEAT_CONSTPACFIELD",
      "title": "PAC algorithm enhancement",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth_LR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v9Ap4"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth_LR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FPACCOMBINE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAuth_LR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SCTLR2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PAuth_LR"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HCX"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PAuth_LR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PACM",
                      "instance": null,
                      "name": "ID_AA64ISAR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">",
              "right": {
                "_type": "AST.Integer",
                "value": 0
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PAuth_LR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "APA",
                          "instance": null,
                          "name": "ID_AA64ISAR1_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": ">=",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 6
                  }
                },
                "op": "||",
                "right": {
                  "_type": "AST.BinaryOp",
                  "left": {
                    "_type": "AST.Function",
                    "arguments": [
                      {
                        "_type": "Types.Field",
                        "value": {
                          "field": "API",
                          "instance": null,
                          "name": "ID_AA64ISAR1_EL1",
                          "slices": null,
                          "state": "AArch64"
                        }
                      }
                    ],
                    "name": "UInt",
                    "parameters": []
                  },
                  "op": ">=",
                  "right": {
                    "_type": "AST.Integer",
                    "value": 6
                  }
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "APA3",
                        "instance": null,
                        "name": "ID_AA64ISAR2_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 6
                }
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_PAuth_LR is OPTIONAL from Armv9.4.",
          "If FEAT_PAuth_LR is implemented, then x[FEAT_FPACCOMBINE](feat:FEAT_FPACCOMBINE) is implemented.",
          "If FEAT_PAuth_LR is implemented, then x[FEAT_SCTLR2](feat:FEAT_SCTLR2) is implemented.",
          "When FEAT_PAuth_LR and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented, x[FEAT_HCX](feat:FEAT_HCX) is implemented.",
          "The following fields identify the presence of FEAT_PAuth_LR:",
          " - AArch64-ID_AA64ISAR3_EL1.PACM.",
          " - AArch64-ID_AA64ISAR1_EL1.APA.",
          " - AArch64-ID_AA64ISAR1_EL1.API.",
          " - AArch64-ID_AA64ISAR2_EL1.APA3."
        ],
        "before": "FEAT_PAuth_LR introduces instructions that allow signing of the 64-bit value in LR against the value of SP, and a PC-relative instruction address."
      },
      "name": "FEAT_PAuth_LR",
      "title": "Pointer authentication instructions that allow signing of LR using SP and PC as diversifiers",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The Armv8.1 architecture extension is an extension to Armv8.0. It adds mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv8.1 compliant if all of the following apply:",
          "- It is Armv8.0 compliant.",
          " - It includes all of the Armv8.1 architectural features that are mandatory.",
          "An Armv8.1 compliant implementation can additionally include:",
          " - Armv8.1 features that are optional.",
          "- Any arbitrary subset of the architectural features of Armv8.2, subject only to those constraints that require that certain features be implemented together."
        ]
      },
      "name": "v8Ap1",
      "title": "The Armv8.1 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TTCNP"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_TTCNP"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TTCNP"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CnP",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TTCNP"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CnP",
                      "instance": null,
                      "name": "ID_MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TTCNP"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CnP",
                      "instance": null,
                      "name": "ID_MMFR4",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_TTCNP is OPTIONAL from Armv8.1.",
          "FEAT_TTCNP is mandatory from Armv8.2.",
          "The following fields identify the presence of FEAT_TTCNP:",
          " - AArch64-ID_AA64MMFR2_EL1.CnP.",
          " - AArch64-ID_MMFR4_EL1.CnP.",
          " - AArch32-ID_MMFR4.CnP.",
          "For more information, see:",
          " - x[Common not private translations](#MDSec.Common_not_private_translations|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Common not private translations in VMSAv8-32](#CHDIBJCF|G_the_aarch32_virtual_memory_system_architecture.fm)."
        ],
        "before": [
          "FEAT_TTCNP permits multiple PEs in the same Inner Shareable domain to use the same translation tables for a given stage of address translation.",
          "This facility is available for all VMSAv8-64 translation regimes and for VMSAv8-32 translation stages that use the Long descriptor Translation Table format."
        ]
      },
      "name": "FEAT_TTCNP",
      "title": "Translation table Common not private translations",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_XNX"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_XNX"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_XNX"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "XNX",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_XNX"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "XNX",
                      "instance": null,
                      "name": "ID_MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_XNX"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "XNX",
                      "instance": null,
                      "name": "ID_MMFR4",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_XNX is OPTIONAL from Armv8.1.",
          "In an Armv8.2 implementation, if x[FEAT_EL2](feat:FEAT_EL2) is implemented, FEAT_XNX is implemented.",
          "The following fields identify the presence of FEAT_XNX:",
          " - AArch64-ID_AA64MMFR1_EL1.XNX.",
          " - AArch64-ID_MMFR4_EL1.XNX.",
          " - AArch32-ID_MMFR4.XNX.",
          "For more information, see:",
          " - x[Stage 2 instruction execution using Direct permissions](#MDSec.Stage_2_instruction_execution_using_Direct_permissions|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Access permissions for instruction execution](#CHDDCJHB|G_the_aarch32_virtual_memory_system_architecture.fm)."
        ],
        "before": [
          "FEAT_XNX extends the stage 2 translation table access permissions to provide control of whether memory is executable at EL0 independent of whether it is executable at EL1.",
          "This facility is available for stage 2 translation stages in VMSAv8-64 and VMSAv8-32."
        ]
      },
      "name": "FEAT_XNX",
      "title": "Translation table stage 2 Unprivileged Execute-never",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_UAO"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_UAO"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_UAO"
            },
            "op": "==>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "UAO",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_UAO is OPTIONAL from Armv8.1.",
          "FEAT_UAO is mandatory from Armv8.2.",
          "The following field identifies the presence of FEAT_UAO:",
          " - AArch64-ID_AA64MMFR2_EL1.UAO.",
          "For more information, see:",
          " - x[PSTATE.UAO](#MDSec.PSTATE_UAO|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Load/store unprivileged](#CJAGBDDD|C_a64_instruction_set_overview.fm).",
          " - AArch64-UAO."
        ],
        "before": "FEAT_UAO introduces the UAO bit to x[PSTATE](PSTATE|D_the_aarch64_system_level_programmers_model.fm). When the Effective value of UAO is 1, if memory accesses that are described as unprivileged are made by the unprivileged memory access instructions, they are privileged."
      },
      "name": "FEAT_UAO",
      "title": "Unprivileged Access Override control",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAN2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAN2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAN2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAN"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PAN2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PAN",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PAN2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PAN",
                      "instance": null,
                      "name": "ID_MMFR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PAN2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PAN",
                      "instance": null,
                      "name": "ID_MMFR3",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_PAN2 is OPTIONAL from Armv8.1.",
          "FEAT_PAN2 is mandatory from Armv8.2.",
          "If FEAT_PAN2 is implemented, then x[FEAT_PAN](feat:FEAT_PAN) is implemented.",
          "The following fields identify the presence of FEAT_PAN2:",
          " - AArch64-ID_AA64MMFR1_EL1.PAN.",
          " - AArch64-ID_MMFR3_EL1.PAN.",
          " - AArch32-ID_MMFR3.PAN.",
          "For more information, see:",
          " - [Address translation instructions](#MDSec.Address_translation_instructions).",
          " - [Address translation instructions](#BEIEGCHA).",
          " - [ATS1C**, Address translation stage 1, current security state](#BEIHJGFI).",
          " - [Encoding and availability of the address translation instructions](#BEIHBDBA)."
        ],
        "before": [
          "FEAT_PAN2 introduces variants of the AArch64 AT S1E1R and AT S1E1W instructions and the AArch32 ATS1CPR and ATS1CPW instructions. These instructions factor in the x[PSTATE](#PSTATE|D_the_aarch64_system_level_programmers_model.fm).PAN bit when determining whether or not the location will generate a Permission fault for a privileged access, as is reported in the PAR. For more information, see:",
          "For the AArch64 System instructions:",
          " - x[AT S1E1RP, Address Translate Stage 1 EL1 Read PAN](#AArch64.at_s1e1rp|C_the_a64_system_instruction_class.fm).",
          " - x[AT S1E1RP, Address Translate Stage 1 EL1 Write PA](#AArch64.at_s1e1rp|C_the_a64_system_instruction_class.fm).",
          "For the AArch32 System instructions:",
          " - x[ATS1CPRP, Address Translate Stage 1 Current state PL1 Read PAN](#AArch32.ats1cprp|G_aarch32_system_register_descriptions.fm).",
          " - x[ATS1CPRP, Address Translate Stage 1 Current state PL1 write PAN](#AArch32.ats1cprp|G_aarch32_system_register_descriptions.fm)."
        ]
      },
      "name": "FEAT_PAN2",
      "title": "AT S1E1R and AT S1E1W instruction variants affected by PSTATE.PAN",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_DPB"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_DPB"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_DPB"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DPB",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_DPB is OPTIONAL from Armv8.1.",
          "FEAT_DPB is mandatory from Armv8.2.",
          "The following field identifies the presence of FEAT_DPB:",
          " - AArch64-ID_AA64ISAR1_EL1.DPB.",
          "For more information, see x[Memory hierarchy](#CHDFIJCI|B_the_aarch64_application_level_memory_model.fm)."
        ],
        "before": "FEAT_DPB introduces a mechanism to identify and manage persistent memory locations in a shared memory hierarchy, including adding the x[DC CVAP](#AArch64.dc_cvap|C_the_a64_system_instruction_class.fm) instruction."
      },
      "name": "FEAT_DPB",
      "title": "DC CVAP instruction",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p9"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EDHSR"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EDHSR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EDHSR"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "HSR",
                    "instance": null,
                    "name": "EDDEVID1",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 1
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_EDHSR is OPTIONAL.",
          "If x[FEAT_Debugv8p9](feat:FEAT_Debugv8p9) is implemented, then FEAT_EDHSR is implemented.",
          "If FEAT_EDHSR is implemented, then x[FEAT_Debugv8p2](feat:FEAT_Debugv8p2) is implemented.",
          "The following field identifies the presence of FEAT_EDHSR:",
          " - ext-EDDEVID1.HSR."
        ],
        "before": "FEAT_EDHSR introduces the x[EDHSR](ext.edhsr|H_external_debug_register_descriptions.fm), which holds syndrome information of a Debug event."
      },
      "name": "FEAT_EDHSR",
      "title": "Support for EDHSR",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DebugVer",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 8
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CopDbg",
                      "instance": null,
                      "name": "ID_DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 8
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "Version",
                      "instance": null,
                      "name": "DBGDIDR",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 8
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CopDbg",
                      "instance": null,
                      "name": "ID_DFR0",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 8
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p2"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "ARCHVER",
                    "instance": null,
                    "name": "EDDEVARCH",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 8
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_Debugv8p2 is OPTIONAL from Armv8.1.",
          "FEAT_Debugv8p2 is mandatory from Armv8.2.",
          "If FEAT_Debugv8p2 is implemented, then x[FEAT_Debugv8p1](feat:FEAT_Debugv8p1) is implemented.",
          "The following fields identify the presence of FEAT_Debugv8p2:",
          " - AArch64-ID_AA64DFR0_EL1.DebugVer.",
          " - AArch64-ID_DFR0_EL1.CopDbg.",
          " - AArch32-DBGDIDR.Version.",
          " - AArch32-ID_DFR0.CopDbg.",
          " - ext-EDDEVARCH.ARCHVER.",
          "For more information, see:",
          " - x[Exception Catch debug event](#exception_catch_debug_event|H_halting_debug_events.fm).",
          " - x[EDPRSR.{DLK, SPD, PU} and the Core power domain](#BABFCFCG|H_debug_reset_and_powerdown_support.fm).",
          " - x[Interaction with EL3](#CACGCIFJ|D_the_performance_monitors_extension.fm).",
          " - x[External access disabled](#BABCADCB|H_about_the_external_debug_registers.fm)."
        ],
        "before": [
          "FEAT_Debugv8p2 provides the following changes:",
          " - If the Core power domain is powered up and DoubleLockStatus() == TRUE, x[EDPRSR](ext.edprsr|H_external_debug_register_descriptions.fm).{DLK,SPD,PU} is only permitted to read {UNKNOWN, 0, 0}.",
          " - The definition of Exception Catch debug events is extended to include reset entry.",
          " - All CONSTRAINED UNPREDICTABLE cases that generate Exception Catch debug events are removed.",
          " - Controls are added to x[EDECCR](ext.edeccr|H_external_debug_register_descriptions.fm) to control Exception Catch debug event generation on exception return.",
          " - All IMPLEMENTATION DEFINED control of external debug accesses to x[OSLAR_EL1](ext.oslar_el1|H_external_debug_register_descriptions.fm) is removed.",
          " - ExternalSecureNoninvasiveDebugEnabled() cannot override software controls of counting attributable events in Secure state."
        ]
      },
      "name": "FEAT_Debugv8p2",
      "title": "Debug v8.2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ASMv8p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ASMv8p2"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_ASMv8p2 is OPTIONAL from Armv8.1.",
          "FEAT_ASMv8p2 is mandatory from Armv8.2.",
          "For more information, see:",
          " - x[BFC](#A64.instructions.BFC_BFM|C_a64_base_instruction_descriptions.fm).",
          " - x[REV64](#A64.instructions.REV64_REV|C_a64_base_instruction_descriptions.fm)."
        ],
        "before": [
          "FEAT_ASMv8p2 introduces the x[BFC](A64.instructions.BFC_BFM|C_a64_base_instruction_descriptions.fm) instruction to the A64 instruction set as an alias of BFM. It also requires that the BFC instruction and the A64 pseudo-instruction x[REV64](A64.instructions.REV64_REV|C_a64_base_instruction_descriptions.fm) are implemented by assemblers.",
          "In Armv8.0 and Armv8.1, the A64 pseudo-instruction REV64 is OPTIONAL."
        ]
      },
      "name": "FEAT_ASMv8p2",
      "title": "Armv8.2 changes to the A64 ISA",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_IESB"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_IESB"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_RAS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_IESB"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "IESB",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_IESB is OPTIONAL from Armv8.1.",
          "If FEAT_IESB is implemented, then x[FEAT_RAS](feat:FEAT_RAS) is implemented.",
          "The following field identifies the presence of FEAT_IESB:",
          " - AArch64-ID_AA64MMFR2_EL1.IESB.",
          "For more information, see x[Error synchronization event](#MDSec.error_synchronization_event|D_ras_pe_architecture.fm)."
        ],
        "before": [
          "FEAT_IESB introduces control for an implicit error synchronization event at exception entry and return.",
          "The implicit error synchronization events affect the same synchronizable asynchronous events that are synchronized by the ESB instruction. This means that if an implementation has either no sources of SError exceptions, or all SError exceptions are not synchronizable errors, then the controls added by this feature have no effect."
        ]
      },
      "name": "FEAT_IESB",
      "title": "Implicit Error Synchronization event",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RAS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_RAS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RAS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RAS",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RAS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RAS",
                      "instance": null,
                      "name": "ID_PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RAS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RAS",
                      "instance": null,
                      "name": "ID_PFR0",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_RAS is OPTIONAL from Armv8.0.",
          "FEAT_RAS is mandatory from Armv8.2.",
          "The following fields identify the presence of FEAT_RAS:",
          " - AArch64-ID_AA64PFR0_EL1.RAS.",
          " - AArch64-ID_PFR0_EL1.RAS.",
          " - AArch32-ID_PFR0.RAS.",
          "For more information, see:",
          " - x[Reliability, Availability, and Serviceability](#RAS_introduction|A_introduction_to_the_armv8_architecture.fm).",
          " - x[RAS PE Architecture](#RAS_pe_architecture|D_ras_pe_architecture.fm).",
          " - *Arm^®^ Reliability Availability and Serviceability (RAS) System Architecture, for A-profile architecture* (ARM IHI 0100)."
        ],
        "before": [
          "FEAT_RAS introduces the following:",
          " - The <i>Error Synchronization Barrier</i> (ESB) instruction for the A32, T32, and A64 instruction sets.",
          " - Error records.",
          " - The Error synchronization event.",
          " - Additional syndrome information on External Aborts."
        ]
      },
      "name": "FEAT_RAS",
      "title": "Reliability, Availability and Serviceability (RAS) Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32HPD"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32HPD"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32HPD"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "HPDS",
                      "instance": null,
                      "name": "ID_MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32HPD"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "HPDS",
                      "instance": null,
                      "name": "ID_MMFR4",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch32 state only.",
          "FEAT_AA32HPD is OPTIONAL from Armv8.1.",
          "If FEAT_AA32HPD is implemented, then x[FEAT_AA32](feat:FEAT_AA32) is implemented.",
          "The following fields identify the presence of FEAT_AA32HPD:",
          " - AArch64-ID_MMFR4_EL1.HPDS.",
          " - AArch32-ID_MMFR4.HPDS.",
          "For more information, see x[Attribute fields in VMSAv8-32 Long-descriptor translation table format descriptors](#CHDIEGAC|G_the_aarch32_virtual_memory_system_architecture.fm)"
        ],
        "before": "x[FEAT_HPDS](FEAT_HPDS|A_armv8_architecture_extensions.fm) introduced the ability to disable the hierarchical permissions, APTable, PXNTable, and UXNTable, in the VMSAv8-64 translation regimes. FEAT_AA32HPD extends this functionality to the VMSAv8-32 translation regimes when those regimes are using the Long descriptor Translation Table format."
      },
      "name": "FEAT_AA32HPD",
      "title": "AArch32 Hierarchical permission disables",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HPDS2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_HPDS2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32HPD"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HPDS2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HPDS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_HPDS2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "HPDS",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_HPDS2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "HPDS",
                      "instance": null,
                      "name": "ID_MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_HPDS2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "HPDS",
                      "instance": null,
                      "name": "ID_MMFR4",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_HPDS2 is OPTIONAL from Armv8.1.",
          "When x[FEAT_AA32EL1](feat:FEAT_AA32EL1) and FEAT_HPDS2 are implemented, x[FEAT_AA32HPD](feat:FEAT_AA32HPD) is implemented.",
          "If FEAT_HPDS2 is implemented, then x[FEAT_HPDS](feat:FEAT_HPDS) is implemented.",
          "The following fields identify the presence of FEAT_HPDS2:",
          " - AArch64-ID_AA64MMFR1_EL1.HPDS.",
          " - AArch64-ID_MMFR4_EL1.HPDS.",
          " - AArch32-ID_MMFR4.HPDS.",
          "For more information, see:",
          " - x[Page Based Hardware attributes](#MDSec.Page_Based_Hardware_attributes|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Attribute fields in VMSAv8-32 Long-descriptor translation table format descriptors](#CHDIEGAC|G_the_aarch32_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_HPDS2 provides a mechanism to allow operating systems or hypervisors to make up to four bits of Translation Table final-level descriptors available for IMPLEMENTATION DEFINED hardware use."
      },
      "name": "FEAT_HPDS2",
      "title": "Hierarchical permission disables",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LSMAOC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LSMAOC"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LSMAOC"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LSM",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LSMAOC"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LSM",
                      "instance": null,
                      "name": "ID_MMFR4_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LSMAOC"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LSM",
                      "instance": null,
                      "name": "ID_MMFR4",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_LSMAOC is OPTIONAL from Armv8.1.",
          "If FEAT_LSMAOC is implemented, then x[FEAT_AA32](feat:FEAT_AA32) is implemented.",
          "The following fields identify the presence of FEAT_LSMAOC:",
          " - AArch64-ID_AA64MMFR2_EL1.LSM.",
          " - AArch64-ID_MMFR4_EL1.LSM.",
          " - AArch32-ID_MMFR4.LSM.",
          "For more information, see the register field descriptions and:",
          " - x[Generation of Alignment faults by load/store multiple accesses to Device memory](#CEGHGFFE|E_the_aarch32_application_level_memory__.fm).",
          " - x[Multi-register loads and stores that access Device memory](#AA32CHDEHDAC|E_the_aarch32_application_level_memory__.fm).",
          " - x[Taking an interrupt or other exception during a multiple-register load or store](#BEIJHJHE|G_the_aarch32_system_level_programmers_model.fm)."
        ],
        "before": "FEAT_LSMAOC introduces controls that disable legacy behavior of AArch32 load multiple and store multiple instructions, and provide a trap of one aspect of this legacy behavior."
      },
      "name": "FEAT_LSMAOC",
      "title": "AArch32 Load/Store Multiple instruction atomicity and ordering controls",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap4"
            },
            "op": "&&",
            "right": {
              "_type": "AST.UnaryOp",
              "expr": {
                "_type": "AST.Identifier",
                "value": "FEAT_FHM"
              },
              "op": "!"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP16"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_FHM"
              }
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP16"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FP",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "SInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AdvSIMD",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "SInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FPHP",
                      "instance": null,
                      "name": "MVFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SIMDHP",
                      "instance": null,
                      "name": "MVFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FPHP",
                      "instance": null,
                      "name": "MVFR1",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SIMDHP",
                      "instance": null,
                      "name": "MVFR1",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_FP16 is OPTIONAL from Armv8.2.",
          "In an Armv8.4 implementation, if FEAT_FHM is not implemented, then x[FEAT_FP16](feat:FEAT_FP16) is not implemented.",
          "In an Armv8.2 implementation, if x[FEAT_SVE](feat:FEAT_SVE) or x[FEAT_FHM](feat:FEAT_FHM) is implemented, FEAT_FP16 is implemented.",
          "The following fields identify the presence of FEAT_FP16:",
          " - AArch64-ID_AA64PFR0_EL1.FP.",
          " - AArch64-ID_AA64PFR0_EL1.AdvSIMD.",
          " - AArch64-MVFR1_EL1.FPHP.",
          " - AArch64-MVFR1_EL1.SIMDHP.",
          " - AArch32-MVFR1.FPHP.",
          " - AArch32-MVFR1.SIMDHP.",
          "For more information, see:",
          " - x[Half-precision floating-point formats](#BHBCBHFD|A_introduction_to_the_armv8_architecture.fm).",
          " - x[Flushing denormalized numbers to zero](#Chdbdeij|A_introduction_to_the_armv8_architecture.fm).",
          " - x[Modified immediate constants in A64 floating-point instructions](#CJAFAFAI|C_about_the_a64_instruction_descriptions.fm)."
        ],
        "before": [
          "FEAT_FP16 supports:",
          " - Half-precision data-processing instructions for Advanced SIMD and floating-point.",
          "The following fields enable flushing of denormalized numbers to zero for half-precision data-processing instructions:",
          " - x[FPCR](#AArch64.fpcr|C_the_a64_system_instruction_class.fm).FZ16.",
          " - x[FPSCR](#AArch32.fpscr|G_aarch32_system_register_descriptions.fm).FZ16."
        ]
      },
      "name": "FEAT_FP16",
      "title": "Half-precision floating-point data processing",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LVA"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LVA"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "VARange",
                      "instance": null,
                      "name": "ID_AA64MMFR2_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_LVA is OPTIONAL from Armv8.1.",
          "The following field identifies the presence of FEAT_LVA:",
          " - AArch64-ID_AA64MMFR2_EL1.VARange.",
          "For more information about FEAT_LVA, see:",
          " - x[Supported virtual address ranges](#MDSec.Supported_virtual_address_ranges|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Input address size configuration](#MDSec.Input_address_size_configuration|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Translation using the 64KB granule](#MDSec.Translation_using_the_64KB_granule|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": [
          "FEAT_LVA supports a *virtual address* (VA) space for each translation table base register of up to 52 bits when using any of the following:",
          " - VMSAv9-128 translation format.",
          " - VMSAv8-64 translation format with the 64KB translation granule."
        ]
      },
      "name": "FEAT_LVA",
      "title": "Large VA support",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LPA"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LPA"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PARange",
                      "instance": null,
                      "name": "ID_AA64MMFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 6
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_LPA is OPTIONAL from Armv8.1.",
          "The following field identifies the presence of FEAT_LPA:",
          " - AArch64-ID_AA64MMFR0_EL1.PARange.",
          "For more information about FEAT_LPA, see:",
          " - x[Implemented physical address size](#MDSec.Implemented_physical_address_size|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Output address size configuration](#MDSec.Output_address_size_configuration|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Intermediate physical address size configuration](#MDSec.Intermediate_physical_address_size_configuration|D_the_aarch64_virtual_memory_system_architecture.fm)",
          " - x[Translation using the 64KB granule](#MDSec.Translation_using_the_64KB_granule|D_the_aarch64_virtual_memory_system_architecture.fm)",
          " - x[Table descriptor format](#MDSec.Page_Based_Hardware_attributes|D_the_aarch64_virtual_memory_system_architecture.fm)",
          " - x[Block descriptor and Page descriptor formats](#MDSec.Translation_table_descriptor_formats|D_the_aarch64_virtual_memory_system_architecture.fm)"
        ],
        "before": [
          "FEAT_LPA:",
          " - Allows a larger <i>physical address</i> (PA) and <i>intermediate physical address</i> (IPA) space of up to 52 bits when using the 64KB translation granule.",
          " - Allows a level 1 block size where the block covers a 4TB address range for the 64KB translation granule if the implementation support 52 bits of PA."
        ]
      },
      "name": "FEAT_LPA",
      "title": "Large PA and IPA support",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PCSRv8p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PCSRv8p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_PCSRv8"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PCSRv8p2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "AST.DotAtom",
                    "values": [
                      {
                        "_type": "AST.Identifier",
                        "value": "PMU"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "PMDEVID"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "PCSample"
                      }
                    ]
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_PCSRv8p2 is OPTIONAL from Armv8.1.",
          "If FEAT_PCSRv8p2 is implemented, then x[FEAT_PCSRv8](feat:FEAT_PCSRv8) is not implemented.",
          "The following field identifies the presence of FEAT_PCSRv8p2:",
          " - PMDEVID.PCSample.",
          "For more information, see x[The PC Sample-based Profiling Extension](#BABDFDEB|H_the_sample_based_profiling__.fm)."
        ],
        "before": "FEAT_PCSRv8p2 moves the control and implementation of the OPTIONAL PC Sample-based Profiling Extension from the ED&#42;SR Debug registers to PM&#42;SR registers in the Performance Monitors address space."
      },
      "name": "FEAT_PCSRv8p2",
      "title": "PC Sample-based Profiling Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SHA512"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SHA512"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Crypto"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SHA512"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SHA256"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SHA1"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SHA512"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SHA2",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "These instructions are added to the A64 instruction set only.",
          "FEAT_SHA512 is OPTIONAL from Armv8.1.",
          "If FEAT_SHA512 is implemented, then x[FEAT_Crypto](feat:FEAT_Crypto) is implemented.",
          "If FEAT_SHA512 is implemented, then x[FEAT_SHA256](feat:FEAT_SHA256) and x[FEAT_SHA1](feat:FEAT_SHA1) are implemented.",
          "The following field identifies the presence of FEAT_SHA512:",
          " - AArch64-ID_AA64ISAR0_EL1.SHA2.",
          "For more information, see x[FEAT_SHA512, SHA2-512 functionality](#BABBIJJI|C_a64_instruction_set_overview.fm)."
        ],
        "before": "FEAT_SHA512 introduces Advanced SIMD instructions that support SHA2-512 functionality."
      },
      "name": "FEAT_SHA512",
      "title": "Advanced SIMD SHA512 instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SHA3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SHA3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Crypto"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SHA3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SHA256"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SHA1"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SHA3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SHA3",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "These instructions are added to the A64 instruction set only.",
          "FEAT_SHA3 is OPTIONAL from Armv8.1.",
          "If FEAT_SHA3 is implemented, then x[FEAT_Crypto](feat:FEAT_Crypto) is implemented.",
          "If FEAT_SHA3 is implemented, then x[FEAT_SHA256](feat:FEAT_SHA256) and x[FEAT_SHA1](feat:FEAT_SHA1) are implemented.",
          "The following field identifies the presence of FEAT_SHA3:",
          " - AArch64-ID_AA64ISAR0_EL1.SHA3.",
          "For more information, see x[FEAT_SHA3, SHA3 functionality](#CEGEDAGF|C_a64_instruction_set_overview.fm)."
        ],
        "before": "FEAT_SHA3 introduces Advanced SIMD instructions that support SHA3 functionality."
      },
      "name": "FEAT_SHA3",
      "title": "Advanced SIMD SHA3 instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SM3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SM3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Crypto"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SM3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SM3",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "These instructions are added to the A64 instruction set only.",
          "FEAT_SM3 is OPTIONAL from Armv8.1.",
          "If FEAT_SM3 is implemented, then x[FEAT_Crypto](feat:FEAT_Crypto) is implemented.",
          "The following field identifies the presence of FEAT_SM3:",
          " - AArch64-ID_AA64ISAR0_EL1.SM3.",
          "For more information, see x[FEAT_SM3, SM3 functionality](#BABHDHGB|C_a64_instruction_set_overview.fm)."
        ],
        "before": "FEAT_SM3 introduces Advanced SIMD instructions that support the Chinese cryptography algorithm SM3."
      },
      "name": "FEAT_SM3",
      "title": "Advanced SIMD SM3 instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SM4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SM4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Crypto"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SM4"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SM4",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "These instructions are added to the A64 instruction set only.",
          "FEAT_SM4 is OPTIONAL from Armv8.1.",
          "If FEAT_SM4 is implemented, then x[FEAT_Crypto](feat:FEAT_Crypto) is implemented.",
          "The following field identifies the presence of FEAT_SM4:",
          " - AArch64-ID_AA64ISAR0_EL1.SM4.",
          "For more information, see x[FEAT_SM4, SM4 functionality](#CEGGDIDF|C_a64_instruction_set_overview.fm)."
        ],
        "before": "FEAT_SM4 introduces Advanced SIMD instructions that support the Chinese cryptography algorithm SM4."
      },
      "name": "FEAT_SM4",
      "title": "Advanced SIMD SM4 instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Crypto"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AES"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SHA1"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_Crypto"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_PMULL"
                },
                "op": "||",
                "right": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_SHA256"
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SM3"
              }
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SM4"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_Crypto is OPTIONAL.",
          "If FEAT_Crypto is implemented, then x[FEAT_AES](feat:FEAT_AES) or x[FEAT_SHA1](feat:FEAT_SHA1) is implemented.",
          "In an Armv8.2 implementation, if FEAT_Crypto is implemented, x[FEAT_PMULL](feat:FEAT_PMULL), x[FEAT_SHA256](feat:FEAT_SHA256), x[FEAT_SM3](feat:FEAT_SM3), or x[FEAT_SM4](feat:FEAT_SM4) is implemented.",
          "For more information, see:",
          " - [The Cryptographic Extension in AArch64 state](#AA64_crypto_extension).",
          " - [The Cryptographic Extension in AArch32 state](#AA32_crypto_extension)."
        ],
        "before": [
          "The Arm Cryptographic Extension provides instructions for the acceleration of encryption and decryption. The presence of the Cryptographic Extension in an implementation is subject to export license controls.",
          "The Cryptographic Extension is an extension of the SIMD support and operates on the vector register file. It also provides multiply instructions that operate on long polynomials.",
          "In an implementation that supports both AArch64 state and AArch32 state, FEAT_AES, FEAT_PMULL, FEAT_SHA1 and FEAT_SHA256 provide the same functionality in both states."
        ]
      },
      "name": "FEAT_Crypto",
      "title": "Cryptographic Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_F32MM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_F32MM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_F32MM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "F32MM",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_F32MM is OPTIONAL from Armv8.2.",
          "If FEAT_F32MM is implemented, then x[FEAT_SVE](feat:FEAT_SVE) is implemented.",
          "The following field identifies the presence of FEAT_F32MM:",
          " - AArch64-ID_AA64ZFR0_EL1.F32MM."
        ],
        "before": "FEAT_F32MM introduces support for the SVE single-precision floating-point matrix multiply-accumulate variant of the x[FMMLA](#A64.instructions.fmmla_z_zzz|C_sve_instructions.fm) instruction."
      },
      "name": "FEAT_F32MM",
      "title": "Single-precision floating-point matrix multiply-accumulate",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_F64MM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_F64MM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_F64MM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "F64MM",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_F64MM is OPTIONAL from Armv8.2.",
          "If FEAT_F64MM is implemented, then x[FEAT_SVE](feat:FEAT_SVE) is implemented.",
          "The following field identifies the presence of FEAT_F64MM:",
          " - AArch64-ID_AA64ZFR0_EL1.F64MM."
        ],
        "before": [
          "FEAT_F64MM introduces support for the following SVE instructions:",
          " - x[FMMLA](#A64.instructions.fmmla_z_zzz|C_sve_instructions.fm) (double-precision floating-point matrix multiply-accumulate variant).",
          " - x[LD1ROB (scalar plus immediate)](#A64.instructions.ld1rob_z_p_bi|C_sve_instructions.fm).",
          " - x[LD1ROB (scalar plus scalar)](#A64.instructions.ld1rob_z_p_br|C_sve_instructions.fm).",
          " - x[LD1ROD (scalar plus immediate)](#A64.instructions.ld1rod_z_p_bi|C_sve_instructions.fm).",
          " - x[LD1ROD (scalar plus scalar)](#A64.instructions.ld1rod_z_p_br|C_sve_instructions.fm).",
          " - x[LD1ROH (scalar plus immediate)](#A64.instructions.ld1rod_z_p_bi|C_sve_instructions.fm).",
          " - x[LD1ROH (scalar plus scalar)](#A64.instructions.ld1roh_z_p_br|C_sve_instructions.fm).",
          " - x[LD1ROW (scalar plus immediate)](#A64.instructions.ld1row_z_p_bi|C_sve_instructions.fm).",
          " - x[LD1ROW (scalar plus scalar)](#A64.instructions.ld1row_z_p_br|C_sve_instructions.fm).",
          " - x[TRN1, TRN2 (vectors)](#A64.instructions.trn1_z_zz|C_sve_instructions.fm) (128-bit variant).",
          " - x[UZP1, UZP2 (vectors)](#A64.instructions.uzp1_z_zz|C_sve_instructions.fm) (128-bit variant).",
          " - x[ZIP1, ZIP2 (vectors)](#A64.instructions.zip1_z_zz|C_sve_instructions.fm) (128-bit variant)."
        ]
      },
      "name": "FEAT_F64MM",
      "title": "Double-precision floating-point matrix multiply-accumulate",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_BF16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap6"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_BF16"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_BF16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "BF16",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_BF16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "BF16",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_BF16 is OPTIONAL from Armv8.2.",
          "In an Armv8.6 implementation, if x[FEAT_FP](feat:FEAT_FP) is implemented, FEAT_BF16 is implemented.",
          "The following fields identify the presence of FEAT_BF16:",
          " - AArch64-ID_AA64ISAR1_EL1.BF16.",
          " - AArch64-ID_AA64ZFR0_EL1.BF16.",
          "For more information, see:",
          " - x[BFloat16 floating-point format](#BABIDCII|A_introduction_to_the_armv8_architecture.fm).",
          " - x[Summary of BFloat16 instruction behaviors](#BABBIGBHJ6|A_introduction_to_the_armv8_architecture.fm)."
        ],
        "before": [
          "FEAT_BF16 supports the BFloat16 floating-point format in AArch64 state. This format supports:",
          " - Arithmetic instructions to multiply BFloat16 values and accumulate into single-precision results.",
          " - Arithmetic instructions to accelerate dot product and matrix multiply-accumulate of BFloat16 values into single-precision results.",
          " - Instructions to convert single-precision floating-point values to BFloat16 format."
        ]
      },
      "name": "FEAT_BF16",
      "title": "AArch64 BFloat16 instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32BF16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32BF16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_BF16"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32BF16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32BF16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "BF16",
                      "instance": null,
                      "name": "ID_ISAR6_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32BF16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "BF16",
                      "instance": null,
                      "name": "ID_ISAR6",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch32 state only.",
          "FEAT_AA32BF16 is OPTIONAL from Armv8.2.",
          "If FEAT_AA32BF16 is implemented, then x[FEAT_BF16](feat:FEAT_BF16) is implemented.",
          "If FEAT_AA32BF16 is implemented, then x[FEAT_AA32](feat:FEAT_AA32) is implemented.",
          "The following fields identify the presence of FEAT_AA32BF16:",
          " - AArch64-ID_ISAR6_EL1.BF16.",
          " - AArch32-ID_ISAR6.BF16.",
          "For more information, see:",
          " - x[BFloat16 floating-point format](#BABIDCII|A_introduction_to_the_armv8_architecture.fm).",
          " - x[Advanced SIMD BFloat16 instructions](#CEGBBHFE|F_AArch32_instruction_sets_overview.fm).",
          " - x[Floating-point data-processing](#A32.encoding_index.fpdp|F_a32_instruction_set_encoding.fm)."
        ],
        "before": [
          "FEAT_AA32BF16 supports the BFloat16, or BF16, 16-bit floating-point storage format in AArch32 state. This format supports:",
          " - Arithmetic instructions to multiply BFloat16 values and accumulate into single-precision results.",
          " - Arithmetic instructions to accelerate dot product and matrix multiply-accumulate of BFloat16 values into single-precision results.",
          " - Instructions to convert single-precision floating-point values to BFloat16 format."
        ]
      },
      "name": "FEAT_AA32BF16",
      "title": "AArch32 BFloat16 instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_I8MM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap6"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_I8MM"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_I8MM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "I8MM",
                      "instance": null,
                      "name": "ID_AA64ISAR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_SME"
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_SVE"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_I8MM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "I8MM",
                      "instance": null,
                      "name": "ID_AA64ZFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_I8MM is OPTIONAL from Armv8.1.",
          "FEAT_I8MM is mandatory from Armv8.6.",
          "The following fields identify the presence of FEAT_I8MM:",
          " - AArch64-ID_AA64ISAR1_EL1.I8MM.",
          " - AArch64-ID_AA64ZFR0_EL1.I8MM.",
          "For more information, see:",
          " - x[SIMD integer dot product](#BABHGGFB|C_a64_instruction_set_overview.fm).",
          " - x[SIMD integer matrix multiply-accumulate](#CEGIGEBA|C_a64_instruction_set_overview.fm).",
          " - x[SVE Integer dot product](#CEGCFADJI4|C_a64_instruction_set_overview.fm).",
          " - x[SVE Integer matrix multiply operations](#CEGCHECGF9|C_a64_instruction_set_overview.fm)."
        ],
        "before": "FEAT_I8MM introduces Advanced SIMD and SVE integer matrix multiply-accumulate instructions and dot product instructions."
      },
      "name": "FEAT_I8MM",
      "title": "AArch64 Int8 matrix multiply-accumulate",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32I8MM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32I8MM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_I8MM"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32I8MM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32I8MM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "I8MM",
                      "instance": null,
                      "name": "ID_ISAR6_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32I8MM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "I8MM",
                      "instance": null,
                      "name": "ID_ISAR6",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch32 state only.",
          "FEAT_AA32I8MM is OPTIONAL from Armv8.1.",
          "If FEAT_AA32I8MM is implemented, then x[FEAT_I8MM](feat:FEAT_I8MM) is implemented.",
          "If FEAT_AA32I8MM is implemented, then x[FEAT_AA32](feat:FEAT_AA32) is implemented.",
          "The following fields identify the presence of FEAT_AA32I8MM:",
          " - AArch64-ID_ISAR6_EL1.I8MM.",
          " - AArch32-ID_ISAR6.I8MM.",
          "For more information, see:",
          " - x[Advanced SIMD dot product instructions](#CEGCDIDF|F_AArch32_instruction_sets_overview.fm).",
          " - x[Advanced SIMD matrix multiply-accumulate instructions](#CEGEDFBI|F_AArch32_instruction_sets_overview.fm)."
        ],
        "before": "FEAT_AA32I8MM introduces integer matrix multiply-accumulate instructions and dot product instructions."
      },
      "name": "FEAT_AA32I8MM",
      "title": "AArch32 Int8 matrix multiply-accumulate",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_ArchInst"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_ArchInst"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ArchInst",
                      "instance": null,
                      "name": "PMSIDR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPE_ArchInst is OPTIONAL.",
          "If FEAT_SPE_ArchInst is implemented, then x[FEAT_SPE](feat:FEAT_SPE) is implemented.",
          "The following field identifies the presence of FEAT_SPE_ArchInst:",
          " - AArch64-PMSIDR_EL1.ArchInst.",
          "For more information, see x[The Statistical Profiling Extension](BABHHFEG|A_armv8_architecture_extensions.fm)."
        ],
        "before": "FEAT_SPE_ArchInst provides sampling of architectural instructions by x[FEAT_SPE](#FEAT_SPE). If x[FEAT_SPE](#FEAT_SPE) is implemented and FEAT_SPE_ArchInst is not implemented, then the PE samples microarchitectural operations."
      },
      "name": "FEAT_SPE_ArchInst",
      "title": "Statistical Profiling architectural instruction sampling",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_ERnd"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_ERnd"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ERnd",
                      "instance": null,
                      "name": "PMSIDR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPE_ERnd is OPTIONAL.",
          "If FEAT_SPE_ERnd is implemented, then x[FEAT_SPE](feat:FEAT_SPE) is implemented.",
          "The following field identifies the presence of FEAT_SPE_ERnd:",
          " - AArch64-PMSIDR_EL1.ERnd.",
          "For more information, see x[The Statistical Profiling Extension](BABHHFEG|A_armv8_architecture_extensions.fm)."
        ],
        "before": "FEAT_SPE_ERnd provides a secondary counter, AArch64-PMSICR_EL1.ECOUNT, that is used after the primary sample counter, AArch64-PMSICR_EL1.COUNT, reaches zero when AArch64-PMSIRR_EL1.RND is 1. If FEAT_SPE_ERnd is not implemented, then bits [7:0] of the primary counter are used to provide a random offset."
      },
      "name": "FEAT_SPE_ERnd",
      "title": "Statistical Profiling random sampling at end of period",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMSVer",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPE is OPTIONAL from Armv8.1.",
          "When FEAT_SPE and x[FEAT_PMUv3](feat:FEAT_PMUv3) are implemented, x[FEAT_PMUv3p1](feat:FEAT_PMUv3p1) is implemented.",
          "The following field identifies the presence of FEAT_SPE:",
          " - AArch64-ID_AA64DFR0_EL1.PMSVer.",
          "For more information, see x[The Statistical Profiling Extension](BABHHFEG|A_armv8_architecture_extensions.fm)."
        ],
        "before": "FEAT_SPE provides a non-invasive method of sampling software and hardware using randomized sampling of either architectural instructions, as defined by the instruction set architecture, or by microarchitectural operations."
      },
      "name": "FEAT_SPE",
      "title": "Statistical Profiling Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE_LDS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SPE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SPE_LDS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LDS",
                      "instance": null,
                      "name": "PMSIDR_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SPE_LDS is OPTIONAL.",
          "If FEAT_SPE_LDS is implemented, then x[FEAT_SPE](feat:FEAT_SPE) is implemented.",
          "The following field identifies the presence of FEAT_SPE_LDS:",
          " - AArch64-PMSIDR_EL1.LDS."
        ],
        "before": "FEAT_SPE_LDS indicates that the Statistical Profiling Unit (SPU) can generate x[Data Source packets](#proto.Data_Source_packet|D_statistical_profiling_sample_records.fm)."
      },
      "name": "FEAT_SPE_LDS",
      "title": "Statistical Profiling data source packet generation",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SVE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap3"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FCMA"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP16"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SVE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SVE",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_SVE is OPTIONAL from Armv8.2.",
          "In an Armv8.3 implementation, if FEAT_SVE is implemented, x[FEAT_FCMA](feat:FEAT_FCMA) and x[FEAT_FP16](feat:FEAT_FP16) are implemented.",
          "When FEAT_SVE and x[FEAT_PMUv3](feat:FEAT_PMUv3) are implemented, x[FEAT_PMUv3p1](feat:FEAT_PMUv3p1) is implemented.",
          "The following field identifies the presence of FEAT_SVE:",
          " - AArch64-ID_AA64PFR0_EL1.SVE."
        ],
        "before": [
          "The Scalable Vector Extension includes the following functionality:",
          " - Configurable vector length with scalable vector lengths from 128 bits up to 2048 bits.",
          " - Predication using scalable predicate registers from 16 bits up to 256 bits.",
          " - Instructions that operate on scalable size vectors and predicates.",
          " - Gather-load and scatter-store.",
          " - Software-managed speculative vectorization.",
          " - System registers and fields to configure the Effective SVE vector length and traps.",
          "The Scalable Vector Extension complements the AArch64 Advanced SIMD and floating-point functionality. SVE does not replace the AArch64 Advanced SIMD and floating-point functionality."
        ]
      },
      "name": "FEAT_SVE",
      "title": "Scalable Vector Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_MPAM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_MPAMv1p0"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_MPAMv0p1"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_MPAM is OPTIONAL from Armv8.2.",
          "If FEAT_MPAM is implemented, then x[FEAT_MPAMv1p0](feat:FEAT_MPAMv1p0) or x[FEAT_MPAMv0p1](feat:FEAT_MPAMv0p1) is implemented.",
          "For more information, see x[MPAM PE Architecture](#MPAM_pe_architecture|D_mpam_pe_architecture.fm)."
        ],
        "before": "The MPAM Extension provides a framework for memory-system component controls that partition one or more of the performance resources of the component. There are three versions of the MPAM extension: v1p0, v1p1, and v0p1."
      },
      "name": "FEAT_MPAM",
      "title": "Memory System Resource Partitioning and Monitoring Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [],
      "description": {
        "_type": "Description",
        "after": null,
        "before": [
          "The original Armv8-A architecture is called Armv8.0. It contains mandatory and optional architectural features. Some features must be implemented together. An implementation is Armv8.0 compliant if it includes all of the Armv8.0 architectural features that are mandatory.",
          "An Armv8.0 compliant implementation can additionally include:",
          " - Armv8.0 features that are optional.",
          " - Any arbitrary subset of the architectural features of Armv8.1, subject only to those constraints that require that certain features be implemented together."
        ]
      },
      "name": "v8Ap0",
      "title": "The Armv8.0 architecture extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CRC32"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_CRC32"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CRC32"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CRC32",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CRC32"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CRC32",
                      "instance": null,
                      "name": "ID_ISAR5_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CRC32"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CRC32",
                      "instance": null,
                      "name": "ID_ISAR5",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_CRC32 is OPTIONAL from Armv8.0.",
          "FEAT_CRC32 is mandatory from Armv8.1.",
          "The following fields identify the presence of FEAT_CRC32:",
          " - AArch64-ID_AA64ISAR0_EL1.CRC32.",
          " - AArch64-ID_ISAR5_EL1.CRC32.",
          " - AArch32-ID_ISAR5.CRC32."
        ],
        "before": "FEAT_CRC32 introduces the support for the CRC32* instructions that perform cyclic redundancy check calculations."
      },
      "name": "FEAT_CRC32",
      "title": "CRC32 instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LSE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LSE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LSE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "Atomic",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_LSE is OPTIONAL from Armv8.0.",
          "FEAT_LSE is mandatory from Armv8.1.",
          "The following field identifies the presence of FEAT_LSE:",
          " - AArch64-ID_AA64ISAR0_EL1.Atomic.",
          "For more information, see:",
          " - x[Atomic integer memory operations](#atomic_mem_ops).",
          " - x[Swap operations](#CEGDGAFD).",
          " - x[Compare and Swap operations](#CEGDFADC)."
        ],
        "before": [
          "FEAT_LSE introduces a set of atomic instructions:",
          " - Compare and Swap instructions, `CAS` and `CASP`.",
          " - Atomic memory operation instructions, LD&lt;OP&gt; and ST&lt;OP&gt;, where &lt;OP&gt; is one of ADD, CLR, EOR, SET, SMAX, SMIN, UMAX, and UMIN.",
          " - Swap instruction, SWP."
        ]
      },
      "name": "FEAT_LSE",
      "title": "Large System Extensions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_RDM"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AdvSIMD"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_RDM"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RDM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RDM",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RDM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RDM",
                      "instance": null,
                      "name": "ID_ISAR5_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_RDM"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "RDM",
                      "instance": null,
                      "name": "ID_ISAR5",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_RDM is OPTIONAL from Armv8.0.",
          "In an Armv8.1 implementation, if x[FEAT_AdvSIMD](feat:FEAT_AdvSIMD) is implemented, FEAT_RDM is implemented.",
          "The following fields identify the presence of FEAT_RDM:",
          " - AArch64-ID_AA64ISAR0_EL1.RDM.",
          " - AArch64-ID_ISAR5_EL1.RDM.",
          " - AArch32-ID_ISAR5.RDM."
        ],
        "before": [
          "FEAT_RDM introduces Rounding Double Multiply Add/Subtract Advanced SIMD instructions. For more information, see:",
          "For the A64 instruction set",
          " - x[SQRDMLAH (by element)](#A64.instructions.SQRDMLAH_advsimd_elt|C_a64_adv_simd_and_floating_point__.fm).",
          " - x[SQRDMLAH (vectors)](#A64.instructions.sqrdmlah_z_zzz|C_sve_instructions.fm).",
          " - x[SQRDMLSH (by element)](#A64.instructions.SQRDMLSH_advsimd_elt|C_a64_adv_simd_and_floating_point__.fm).",
          " - x[SQRDMLSH (vector)](#A64.instructions.SQRDMLSH_advsimd_vec|C_a64_adv_simd_and_floating_point__.fm).",
          "For the T32 and A32 instruction sets",
          " - x[VQRDMLAH](#A32T32-fpsimd.instructions.VQRDMLAH|F_t32_a32_adv_simd_fp_instruction_descriptions.fm).",
          " - x[VQRDMLSH](#A32T32-fpsimd.instructions.VQRDMLSH|F_t32_a32_adv_simd_fp_instruction_descriptions.fm)."
        ]
      },
      "name": "FEAT_RDM",
      "title": "Advanced SIMD rounding double multiply-accumulate instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HPDS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HPDS"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_HPDS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "HPDS",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_HPDS is OPTIONAL from Armv8.0.",
          "FEAT_HPDS is mandatory from Armv8.1.",
          "The following field identifies the presence of FEAT_HPDS:",
          " - AArch64-ID_AA64MMFR1_EL1.HPDS.",
          "This feature is added only to the VMSAv8-64 translation regimes. Armv8.2 extends this to the AArch32 translation regimes, see x[FEAT_AA32HPD](FEAT_AA32HPD|A_armv8_architecture_extensions.fm)."
        ],
        "before": "FEAT_HPDS introduces the facility to disable the hierarchical permissions, APTable, PXNTable, and UXNTable, in the translation tables. This disable has no effect on the NSTable bit."
      },
      "name": "FEAT_HPDS",
      "title": "Hierarchical permission disables in translations tables",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_VHE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_VHE"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_VHE"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_LSE"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_Debugv8p1"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_VHE"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "VH",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_VHE is OPTIONAL from Armv8.0.",
          "In an Armv8.1 implementation, if x[FEAT_AA64EL2](feat:FEAT_AA64EL2) is implemented, FEAT_VHE is implemented.",
          "If FEAT_VHE is implemented, then x[FEAT_LSE](feat:FEAT_LSE), x[FEAT_Debugv8p1](feat:FEAT_Debugv8p1), and x[FEAT_AA64EL2](feat:FEAT_AA64EL2) are implemented.",
          "The following field identifies the presence of FEAT_VHE:",
          " - AArch64-ID_AA64MMFR1_EL1.VH.",
          "For more information, see x[Virtualization Host Extensions](#MDSec.Virtualization_Host_Extensions|D_the_aarch64_virtual_memory_system_architecture.fm)"
        ],
        "before": "Armv8.1 introduces the <i>Virtualization Host Extensions</i> (VHE) that provide enhanced support for Type 2 hypervisors in Non-secure state."
      },
      "name": "FEAT_VHE",
      "title": "Virtualization Host Extensions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAN"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PAN"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PAN"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PAN",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PAN"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PAN",
                      "instance": null,
                      "name": "ID_MMFR3_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PAN"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PAN",
                      "instance": null,
                      "name": "ID_MMFR3",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_PAN is OPTIONAL from Armv8.0.",
          "FEAT_PAN is mandatory from Armv8.1.",
          "The following fields identify the presence of FEAT_PAN:",
          " - AArch64-ID_AA64MMFR1_EL1.PAN.",
          " - AArch64-ID_MMFR3_EL1.PAN.",
          " - AArch32-ID_MMFR3.PAN.",
          "For more information, see:",
          " - x[PSTATE.PAN](#MDSec.PSTATE_PAN|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[About the PAN bit](#CCHHABFE|G_the_aarch32_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_PAN introduces a bit to x[PSTATE](#BEIBIIHAH1|B_the_aarch64_application_level_programmers_model.fm). When the value of this PAN state bit is 1, any privileged data access from EL1, or EL2 when the Effective value of x[HCR_EL2](#AArch64.hcr_el2|D_aarch64_system_register_descriptions.fm).E2H is 1, to a virtual memory address that is accessible to data accesses at EL0, generates a Permission fault."
      },
      "name": "FEAT_PAN",
      "title": "Privileged access never",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_LOR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_LOR"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_LOR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "LO",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_LOR is OPTIONAL from Armv8.0.",
          "FEAT_LOR is mandatory from Armv8.1.",
          "The following field identifies the presence of FEAT_LOR:",
          " - AArch64-ID_AA64MMFR1_EL1.LO.",
          "For more information, see x[Limited ordering regions](#BEIHAEHD|B_the_aarch64_application_level_memory_model.fm)."
        ],
        "before": "Limited ordering regions allow large systems to perform special Load-Acquire and Store-Release instructions that provide order between the memory accesses to a region of the PA map as observed by a limited set of observers."
      },
      "name": "FEAT_LOR",
      "title": "Limited ordering regions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DebugVer",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 7
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CopDbg",
                      "instance": null,
                      "name": "ID_DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 7
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_Debugv8p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CopDbg",
                      "instance": null,
                      "name": "ID_DFR0",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 7
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_Debugv8p1"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "ARCHVER",
                    "instance": null,
                    "name": "EDDEVARCH",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 7
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_Debugv8p1 is OPTIONAL from Armv8.0.",
          "The following fields identify the presence of FEAT_Debugv8p1:",
          " - AArch64-ID_AA64DFR0_EL1.DebugVer.",
          " - AArch64-ID_DFR0_EL1.CopDbg.",
          " - AArch32-ID_DFR0.CopDbg.",
          " - ext-EDDEVARCH.ARCHVER."
        ],
        "before": null
      },
      "name": "FEAT_Debugv8p1",
      "title": "Debug v8.1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HAFDBS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HAFDBS"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_HAF"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_HAFDBS"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "HAFDBS",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_HAFDBS is OPTIONAL from Armv8.0.",
          "If FEAT_HAFDBS is implemented, then x[FEAT_HAF](feat:FEAT_HAF) is implemented.",
          "The following field identifies the presence of FEAT_HAFDBS:",
          " - AArch64-ID_AA64MMFR1_EL1.HAFDBS.",
          "For more information, see x[Hardware management of the dirty state](#MDSec.Hardware_management_of_the_dirty_state|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "Hardware can perform updates to dirty state in the translation tables."
      },
      "name": "FEAT_HAFDBS",
      "title": "Hardware management of dirty state",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_HAF"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_HAF"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "HAFDBS",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_HAF is OPTIONAL from Armv8.0.",
          "The following field identifies the presence of FEAT_HAF:",
          " - AArch64-ID_AA64MMFR1_EL1.HAFDBS.",
          "For more information, see x[Hardware management of the Access flag](#MDSec.Hardware_management_of_the_Access_flag|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "Hardware can perform updates to the translation tables to manage the Access flag."
      },
      "name": "FEAT_HAF",
      "title": "Hardware management of the Access flag.",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "v8Ap1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PMUVer",
                        "instance": null,
                        "name": "ID_AA64DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 4
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PMUVer",
                        "instance": null,
                        "name": "ID_AA64DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 4
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0",
                        "slices": null,
                        "state": "AArch32"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 4
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0",
                        "slices": null,
                        "state": "AArch32"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3p1"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMUVer",
                      "instance": null,
                      "name": "EDDFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 4
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMUVer",
                      "instance": null,
                      "name": "EDDFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "<",
              "right": {
                "_type": "AST.Integer",
                "value": 15
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_PMUv3p1 is OPTIONAL from Armv8.0.",
          "In an Armv8.1 implementation, if x[FEAT_PMUv3](feat:FEAT_PMUv3) is implemented, FEAT_PMUv3p1 is implemented.",
          "If FEAT_PMUv3p1 is implemented, then x[FEAT_PMUv3](feat:FEAT_PMUv3) is implemented.",
          "The following fields identify the presence of FEAT_PMUv3p1:",
          " - AArch64-ID_AA64DFR0_EL1.PMUVer.",
          " - AArch64-ID_DFR0_EL1.PerfMon.",
          " - AArch32-ID_DFR0.PerfMon.",
          " - ext-EDDFR.PMUVer.",
          "For more information, see x[Required events](#CACHFJJI|D_pmu_event_descriptions.fm)."
        ],
        "before": [
          "FEAT_PMUv3p1 introduces the following:",
          " - The event number space is extended to 16 bits.",
          " - The HPMD bit is added to x[MDCR_EL2](#AArch64.mdcr_el2|D_aarch64_system_register_descriptions.fm). This bit disables event counting at EL2.",
          " - The x[STALL_FRONTEND](event.stall_frontend|D_pmu_event_descriptions.fm) and x[STALL_BACKEND](event.stall_backend|D_pmu_event_descriptions.fm) events are required to be implemented."
        ]
      },
      "name": "FEAT_PMUv3p1",
      "title": "Armv8.1 PMU extensions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_VMID16"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_VMID16"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "VMIDBits",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "When implemented, this feature is supported only when EL2 is using AArch64.",
          "FEAT_VMID16 is OPTIONAL from Armv8.0.",
          "The following field identifies the presence of FEAT_VMID16:",
          " - AArch64-ID_AA64MMFR1_EL1.VMIDBits.",
          "For more information, see x[VMID size](#MDSec.VMID_size|D_the_aarch64_virtual_memory_system_architecture.fm)."
        ],
        "before": "In an Armv8.1 implementation, when EL2 is using AArch64, the <i>virtual machine identifier</i> (VMID) size is an IMPLEMENTATION DEFINED choice of 8 bits or 16 bits."
      },
      "name": "FEAT_VMID16",
      "title": "16-bit VMID",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AdvSIMD"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AdvSIMD"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AdvSIMD"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AdvSIMD",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "SInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 0
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AdvSIMD"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "AdvSIMD",
                    "instance": null,
                    "name": "EDPFR",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "SInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 0
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_AdvSIMD is OPTIONAL from Armv8.0.",
          "If FEAT_AdvSIMD is implemented, then x[FEAT_FP](feat:FEAT_FP) is implemented.",
          "The following fields identify the presence of FEAT_AdvSIMD:",
          " - AArch64-ID_AA64PFR0_EL1.AdvSIMD.",
          " - ext-EDPFR.AdvSIMD.",
          "For more information, see:",
          " - x[Supported data types](#BABHIBEE|A_introduction_to_the_armv8_architecture.fm).",
          " - x[A64 Advanced SIMD and Floating-point Instruction Descriptions](#autogen.instructions.A64_fpasimd|C_a64_adv_simd_and_floating_point__.fm).",
          " - x[Advanced SIMD and floating-point instructions](#CFIEAFEB|E_the_aarch32_application_level_programmers__.fm).",
          " - x[T32 and A32 Advanced SIMD and Floating-point Instruction Descriptions](#CHDCEHBC|F_t32_a32_adv_simd_fp_instruction_descriptions.fm)."
        ],
        "before": "FEAT_AdvSIMD includes support for the SISD and SIMD operations. All Armv8-A systems that support standard operating systems with rich application environments also provide hardware support for Advanced SIMD instructions."
      },
      "name": "FEAT_AdvSIMD",
      "title": "Advanced SIMD Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AdvSIMD"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_FP"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "FP",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "SInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 0
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_FP"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "FP",
                    "instance": null,
                    "name": "EDPFR",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "SInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 0
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_FP is OPTIONAL from Armv8.0.",
          "If FEAT_FP is implemented, then x[FEAT_AdvSIMD](feat:FEAT_AdvSIMD) is implemented.",
          "The following fields identify the presence of FEAT_FP:",
          " - AArch64-ID_AA64PFR0_EL1.FP.",
          " - ext-EDPFR.FP.",
          "For more information, see:",
          " - x[Supported data types](#BABHIBEE|A_introduction_to_the_armv8_architecture.fm).",
          " - x[Floating-point support](#CFIFBFFD|A_introduction_to_the_armv8_architecture.fm).",
          " - x[A64 Advanced SIMD and Floating-point Instruction Descriptions](#autogen.instructions.A64_fpasimd|C_a64_adv_simd_and_floating_point__.fm).",
          " - x[Advanced SIMD and floating-point instructions](#CFIEAFEB|E_the_aarch32_application_level_programmers__.fm).",
          " - x[T32 and A32 Advanced SIMD and Floating-point Instruction Descriptions](#CHDCEHBC|F_t32_a32_adv_simd_fp_instruction_descriptions.fm)."
        ],
        "before": "FEAT_FP includes support for single-precision and double-precision floating-point types. All Armv8-A systems that support standard operating systems with rich application environments also provide hardware support for floating-point instructions."
      },
      "name": "FEAT_FP",
      "title": "Floating Point extensions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV2_1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV2_1p1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CSV2_1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "CSV2_frac",
                        "instance": null,
                        "name": "ID_AA64PFR1_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 1
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "CSV2",
                        "instance": null,
                        "name": "ID_AA64PFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "==",
                "right": {
                  "_type": "AST.Integer",
                  "value": 1
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CSV2_1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CSV2",
                      "instance": null,
                      "name": "ID_PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CSV2_1p1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CSV2",
                      "instance": null,
                      "name": "ID_PFR0",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_CSV2_1p1 is OPTIONAL from Armv8.0.",
          "If FEAT_CSV2_1p1 is implemented, then x[FEAT_CSV2](feat:FEAT_CSV2) is implemented.",
          "The following fields identify the presence of FEAT_CSV2_1p1:",
          " - AArch64-ID_AA64PFR1_EL1.CSV2_frac.",
          " - AArch64-ID_AA64PFR0_EL1.CSV2.",
          " - AArch64-ID_PFR0_EL1.CSV2.",
          " - AArch32-ID_PFR0.CSV2.",
          "For more information, see:",
          " - For AArch64, x[Restrictions on the effects of speculation](#CHDHJGDA).",
          " - x[AArch32 restrictions on the effects of speculation](#AA32_Restrictions_On_Effects_Of_Speculation)."
        ],
        "before": [
          "For FEAT_CSV2_1p1, within a hardware-described context, branch targets trained for branches situated at one address can control speculative execution of branches situated at different addresses only in a hard-to-determine way.",
          "FEAT_CSV2_1p1 does not support the x[SCXTNUM_ELx](#SCXTNUM_ELx|appx_registers_index.fm) registers."
        ]
      },
      "name": "FEAT_CSV2_1p1",
      "title": "Cache Speculation Variant 2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV2_1p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV2_1p2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV2_1p1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CSV2_1p2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "CSV2_frac",
                        "instance": null,
                        "name": "ID_AA64PFR1_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 2
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "CSV2",
                        "instance": null,
                        "name": "ID_AA64PFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "==",
                "right": {
                  "_type": "AST.Integer",
                  "value": 1
                }
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_CSV2_1p2 is OPTIONAL from Armv8.0.",
          "If FEAT_CSV2_1p2 is implemented, then x[FEAT_CSV2_1p1](feat:FEAT_CSV2_1p1) is implemented.",
          "The following fields identify the presence of FEAT_CSV2_1p2:",
          " - AArch64-ID_AA64PFR1_EL1.CSV2_frac.",
          " - AArch64-ID_AA64PFR0_EL1.CSV2.",
          "For more information, see:",
          " - For AArch64, x[Restrictions on the effects of speculation](#CHDHJGDA).",
          " - x[AArch32 restrictions on the effects of speculation](#AA32_Restrictions_On_Effects_Of_Speculation)."
        ],
        "before": [
          "For FEAT_CSV2_1p2, within a hardware-described context, branch targets trained for branches situated at one address can control speculative execution of branches situated at different addresses only in a hard-to-determine way.",
          "FEAT_CSV2_1p2 introduces the x[SCXTNUM_ELx](#SCXTNUM_ELx|appx_registers_index.fm) registers, but the contexts do not include the x[SCXTNUM_ELx](#SCXTNUM_ELx|appx_registers_index.fm) register contexts."
        ]
      },
      "name": "FEAT_CSV2_1p2",
      "title": "Cache Speculation Variant 2 version 1.2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV2_2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV2_2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV2_2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_CSV2_1p1"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CSV2_2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CSV2",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_CSV2_2 is OPTIONAL from Armv8.0.",
          "If FEAT_CSV2_2 is implemented, then x[FEAT_CSV2](feat:FEAT_CSV2) is implemented.",
          "If FEAT_CSV2_2 is implemented, then x[FEAT_CSV2_1p1](feat:FEAT_CSV2_1p1) is not implemented.",
          "The following field identifies the presence of FEAT_CSV2_2:",
          " - AArch64-ID_AA64PFR0_EL1.CSV2.",
          "For more information, see:",
          " - For AArch64, x[Restrictions on the effects of speculation](#CHDHJGDA).",
          " - x[AArch32 restrictions on the effects of speculation](#AA32_Restrictions_On_Effects_Of_Speculation)."
        ],
        "before": "FEAT_CSV2_2 introduces the x[SCXTNUM_ELx](#SCXTNUM_ELx|appx_registers_index.fm) registers, which provide a number that can be used to separate out different context numbers within their respective Exception levels for the purpose of protecting against speculative attacks through prediction resources."
      },
      "name": "FEAT_CSV2_2",
      "title": "Cache Speculation Variant 2 version 2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV2_3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV2_3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_CSV2_2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_CSV2_3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CSV2",
                      "instance": null,
                      "name": "ID_AA64PFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in AArch64 state only.",
          "FEAT_CSV2_3 is OPTIONAL from Armv8.0.",
          "If FEAT_CSV2_3 is implemented, then x[FEAT_CSV2_2](feat:FEAT_CSV2_2) is implemented.",
          "The following field identifies the presence of FEAT_CSV2_3:",
          " - AArch64-ID_AA64PFR0_EL1.CSV2.",
          "For more information, see:",
          " - For AArch64, x[Restrictions on the effects of speculation](#CHDHJGDA).",
          " - x[AArch32 restrictions on the effects of speculation](#AA32_Restrictions_On_Effects_Of_Speculation)."
        ],
        "before": "FEAT_CSV2_3 introduces a mechanism to identify if hardware cannot disclose information about whether prediction resources based on branch history trained in one hardware described context can control speculative execution in a different hardware described context."
      },
      "name": "FEAT_CSV2_3",
      "title": "Cache Speculation Variant 2 version 3",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETS2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETS2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETS2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ETS",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETS2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ETS",
                      "instance": null,
                      "name": "ID_MMFR5_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETS2"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ETS",
                      "instance": null,
                      "name": "ID_MMFR5",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_ETS2 is OPTIONAL from Armv8.0.",
          "FEAT_ETS2 is mandatory from Armv8.8.",
          "The following fields identify the presence of FEAT_ETS2:",
          " - AArch64-ID_AA64MMFR1_EL1.ETS.",
          " - AArch64-ID_MMFR5_EL1.ETS.",
          " - AArch32-ID_MMFR5.ETS.",
          "For more information, see:",
          " - x[Ordering requirements defined by the formal concurrency model](#BEIFDDEH|B_the_aarch64_application_level_memory_model.fm).",
          " - x[Ordering of memory accesses from translation table walks](#MDSec.Ordering_of_memory_accesses_from_translation_table_walks|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Ordering of translation table walks](#CHDGHDBA|E_the_aarch32_application_level_memory__.fm)."
        ],
        "before": "FEAT_ETS2 introduces support for enhanced memory access ordering requirements for translation table walks."
      },
      "name": "FEAT_ETS2",
      "title": "Enhanced Translation Synchronization",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETS3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap5"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETS3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETS3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETS2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETS3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ETS",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETS3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ETS",
                      "instance": null,
                      "name": "ID_MMFR5_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETS3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "ETS",
                      "instance": null,
                      "name": "ID_MMFR5",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 3
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_ETS3 is OPTIONAL from Armv8.0.",
          "FEAT_ETS3 is mandatory from Armv9.5.",
          "If FEAT_ETS3 is implemented, then x[FEAT_ETS2](feat:FEAT_ETS2) is implemented.",
          "The following fields identify the presence of FEAT_ETS3:",
          " - AArch64-ID_AA64MMFR1_EL1.ETS.",
          " - AArch64-ID_MMFR5_EL1.ETS.",
          " - AArch32-ID_MMFR5.ETS.",
          "For more information, see:",
          " - x[Ordering requirements defined by the formal concurrency model](#BEIFDDEH|B_the_aarch64_application_level_memory_model.fm).",
          " - x[Ordering of memory accesses from translation table walks](#MDSec.Ordering_of_memory_accesses_from_translation_table_walks|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Ordering of translation table walks](#CHDGHDBA|E_the_aarch32_application_level_memory__.fm)."
        ],
        "before": "FEAT_ETS3 introduces support for enhanced memory access ordering requirements for translation table walks."
      },
      "name": "FEAT_ETS3",
      "title": "Enhanced Translation Synchronization",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SHA1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SHA1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Crypto"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SHA1"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SHA1",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_SHA1 is OPTIONAL from Armv8.0.",
          "If FEAT_SHA1 is implemented, then x[FEAT_Crypto](feat:FEAT_Crypto) is implemented.",
          "The following field identifies the presence of FEAT_SHA1:",
          " - AArch64-ID_AA64ISAR0_EL1.SHA1."
        ],
        "before": "FEAT_SHA1 implements the SHA1* instructions."
      },
      "name": "FEAT_SHA1",
      "title": "Advanced SIMD SHA1 instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SHA256"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_SHA256"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_SHA1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_SHA256"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "SHA2",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_SHA256 is OPTIONAL from Armv8.0.",
          "If FEAT_SHA256 is implemented, then x[FEAT_SHA1](feat:FEAT_SHA1) is implemented.",
          "The following field identifies the presence of FEAT_SHA256:",
          " - AArch64-ID_AA64ISAR0_EL1.SHA2."
        ],
        "before": "FEAT_SHA256 implements the SHA256* instructions."
      },
      "name": "FEAT_SHA256",
      "title": "Advanced SIMD SHA256 instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AES"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AES"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_Crypto"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AES"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AES",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_AES is OPTIONAL from Armv8.0.",
          "If FEAT_AES is implemented, then x[FEAT_Crypto](feat:FEAT_Crypto) is implemented.",
          "The following field identifies the presence of FEAT_AES:",
          " - AArch64-ID_AA64ISAR0_EL1.AES."
        ],
        "before": "FEAT_AES provides the AES* instructions to support AES encryption and decryption, x[AESD](#A64.instructions.AESD_advsimd), x[AESE](#A64.instructions.AESE_advsimd), x[AESMC](#A64.instructions.AESMC_advsimd), and x[AESIMC](#A64.instructions.AESIMC_advsimd)."
      },
      "name": "FEAT_AES",
      "title": "Advanced SIMD AES instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMULL"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMULL"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AES"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMULL"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "AES",
                      "instance": null,
                      "name": "ID_AA64ISAR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_PMULL is OPTIONAL from Armv8.0.",
          "If FEAT_PMULL is implemented, then x[FEAT_AES](feat:FEAT_AES) is implemented.",
          "The following field identifies the presence of FEAT_PMULL:",
          " - AArch64-ID_AA64ISAR0_EL1.AES."
        ],
        "before": "FEAT_PMULL provides the AES* instructions that support multiplication of 64-bit polynomials, x[PMULL, PMULL2](#A64.instructions.PMULL_advsimd)."
      },
      "name": "FEAT_PMULL",
      "title": "Advanced SIMD PMULL instructions",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PCSRv8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PCSRv8"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_PCSRv8p2"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PCSRv8"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PCSample",
                      "instance": null,
                      "name": "DBGDEVID",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PCSRv8"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PCSROffset",
                      "instance": null,
                      "name": "DBGDEVID1",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 2
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PCSRv8"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "PCSROffset",
                    "instance": null,
                    "name": "EDDEVID1",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 2
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PCSRv8"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Function",
              "arguments": [
                {
                  "_type": "Types.Field",
                  "value": {
                    "field": "PCSample",
                    "instance": null,
                    "name": "EDDEVID",
                    "slices": null,
                    "state": "ext"
                  }
                }
              ],
              "name": "UInt",
              "parameters": []
            },
            "op": ">=",
            "right": {
              "_type": "AST.Integer",
              "value": 2
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_PCSRv8 is OPTIONAL from Armv8.0.",
          "If FEAT_PCSRv8 is implemented, then x[FEAT_PCSRv8p2](feat:FEAT_PCSRv8p2) is not implemented.",
          "The following fields identify the presence of FEAT_PCSRv8:",
          " - AArch32-DBGDEVID.PCSample.",
          " - AArch32-DBGDEVID1.PCSROffset.",
          " - ext-EDDEVID1.PCSROffset.",
          " - ext-EDDEVID.PCSample.",
          "For more information, see x[About the PC Sample-based Profiling Extension](#Babjgbhj|H_the_sample_based_profiling__.fm)."
        ],
        "before": "FEAT_PCSRv8 introduces support for PC Sample-based Profiling Extension that provides coarse-grained, non-invasive profiling by an external debugger."
      },
      "name": "FEAT_PCSRv8",
      "title": "PC Sample-based Profiling extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_DoubleLock"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_DoubleLock"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_DoubleLock"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DoubleLock",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "SInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 0
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_DoubleLock"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "DoubleLock",
                      "instance": null,
                      "name": "DBGDEVID",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_DoubleLock is OPTIONAL from Armv8.0.",
          "If Armv9.0 is implemented, then x[FEAT_DoubleLock](feat:FEAT_DoubleLock) is not implemented.",
          "The following fields identify the presence of FEAT_DoubleLock:",
          " - AArch64-ID_AA64DFR0_EL1.DoubleLock.",
          " - AArch32-DBGDEVID.DoubleLock."
        ],
        "before": "FEAT_DoubleLock is the mnemonic used for the OS Double Lock."
      },
      "name": "FEAT_DoubleLock",
      "title": "Double Lock",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMU_EXT64"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMU_EXT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMU_EXT64"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_AMU_EXT32"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMU_EXT64"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AMU_EXT"
            },
            "op": "&&",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "AST.DotAtom",
                    "values": [
                      {
                        "_type": "AST.Identifier",
                        "value": "AMU"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "AMDEVARCH"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "ARCHID"
                      }
                    ]
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "==",
              "right": {
                "_type": "AST.Integer",
                "value": 2663
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_AMU_EXT64 is OPTIONAL.",
          "If FEAT_AMU_EXT64 is implemented, then x[FEAT_AMU_EXT](feat:FEAT_AMU_EXT) is implemented.",
          "If FEAT_AMU_EXT64 is implemented, then x[FEAT_AMU_EXT32](feat:FEAT_AMU_EXT32) is not implemented.",
          "The following field identifies the presence of FEAT_AMU_EXT64:",
          " - AMDEVARCH.ARCHID.",
          "For more information, see x[Recommended External Interface to the Activity Monitors](#CEGDJDJD|I_recommended_external_interface_to_activity__.fm)."
        ],
        "before": "FEAT_AMU_EXT64 indicates the external AMU registers are implemented as 64-bit registers."
      },
      "name": "FEAT_AMU_EXT64",
      "title": "64-bit external Activity Monitors extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMU_EXT32"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMU_EXT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMU_EXT32"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_AMU_EXT64"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMU_EXT32"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AMU_EXT"
            },
            "op": "&&",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "AST.DotAtom",
                    "values": [
                      {
                        "_type": "AST.Identifier",
                        "value": "AMU"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "AMDEVARCH"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "ARCHID"
                      }
                    ]
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "==",
              "right": {
                "_type": "AST.Integer",
                "value": 2662
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_AMU_EXT32 is OPTIONAL.",
          "If FEAT_AMU_EXT32 is implemented, then x[FEAT_AMU_EXT](feat:FEAT_AMU_EXT) is implemented.",
          "If FEAT_AMU_EXT32 is implemented, then x[FEAT_AMU_EXT64](feat:FEAT_AMU_EXT64) is not implemented.",
          "The following field identifies the presence of FEAT_AMU_EXT32:",
          " - AMDEVARCH.ARCHID.",
          "For more information, see x[Recommended External Interface to the Activity Monitors](#CEGDJDJD|C_a64_instruction_set_overview.fm)."
        ],
        "before": "FEAT_AMU_EXT32 indicates the external AMU registers are implemented as mostly 32-bit registers."
      },
      "name": "FEAT_AMU_EXT32",
      "title": "32-bit External Activity Monitors",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMU_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AMU_EXT32"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AMU_EXT64"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMU_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AMUv1"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_AMU_EXT is OPTIONAL.",
          "If FEAT_AMU_EXT is implemented, then x[FEAT_AMU_EXT32](feat:FEAT_AMU_EXT32) or x[FEAT_AMU_EXT64](feat:FEAT_AMU_EXT64) is implemented.",
          "If FEAT_AMU_EXT is implemented, then x[FEAT_AMUv1](feat:FEAT_AMUv1) is implemented."
        ],
        "before": "FEAT_AMU_EXT indicates support for external access to the Activity Monitors."
      },
      "name": "FEAT_AMU_EXT",
      "title": "External Activity Monitors",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXT64"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap8"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXT64"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXT64"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT32"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT64"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "AST.DotAtom",
                    "values": [
                      {
                        "_type": "AST.Identifier",
                        "value": "PMU"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "PMDEVARCH"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "ARCHPART"
                      }
                    ]
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "==",
              "right": {
                "_type": "AST.Integer",
                "value": 2598
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_PMUv3_EXT"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_PCSRv8p2"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.UnaryOp",
              "expr": {
                "_type": "AST.Identifier",
                "value": "FEAT_PMUv3"
              },
              "op": "!"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT64"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "AST.DotAtom",
                    "values": [
                      {
                        "_type": "AST.Identifier",
                        "value": "PMU"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "PMDEVARCH"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "ARCHPART"
                      }
                    ]
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "==",
              "right": {
                "_type": "AST.Integer",
                "value": 2592
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_PMUv3_EXT64 is OPTIONAL from Armv8.8.",
          "If FEAT_PMUv3_EXT64 is implemented, then x[FEAT_PMUv3_EXT](feat:FEAT_PMUv3_EXT) is implemented.",
          "If FEAT_PMUv3_EXT64 is implemented, then x[FEAT_PMUv3_EXT32](feat:FEAT_PMUv3_EXT32) is not implemented.",
          "The following field identifies the presence of FEAT_PMUv3_EXT64:",
          " - PMDEVARCH.ARCHPART.",
          "For more information, see x[Recommended External Interface to the Performance Monitors](#CEGDJDJD|I_recommended_external_interface_to_performace__.fm)."
        ],
        "before": "FEAT_PMUv3_EXT64 indicates the external Performance Monitors registers are implemented as 64-bit registers. The 32-bit CoreSight management registers remain 32-bit registers."
      },
      "name": "FEAT_PMUv3_EXT64",
      "title": "64-bit external interface to the Performance Monitors",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXT32"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXT32"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXT32"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT64"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT32"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "AST.DotAtom",
                    "values": [
                      {
                        "_type": "AST.Identifier",
                        "value": "PMU"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "PMDEVARCH"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "ARCHPART"
                      }
                    ]
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "==",
              "right": {
                "_type": "AST.Integer",
                "value": 2582
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Identifier",
                "value": "FEAT_PMUv3_EXT"
              },
              "op": "&&",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_PCSRv8p2"
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.UnaryOp",
              "expr": {
                "_type": "AST.Identifier",
                "value": "FEAT_PMUv3"
              },
              "op": "!"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT32"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "AST.DotAtom",
                    "values": [
                      {
                        "_type": "AST.Identifier",
                        "value": "PMU"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "PMDEVARCH"
                      },
                      {
                        "_type": "AST.Identifier",
                        "value": "ARCHPART"
                      }
                    ]
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "==",
              "right": {
                "_type": "AST.Integer",
                "value": 2576
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_PMUv3_EXT32 is OPTIONAL from Armv8.0.",
          "If FEAT_PMUv3_EXT32 is implemented, then x[FEAT_PMUv3_EXT](feat:FEAT_PMUv3_EXT) is implemented.",
          "If FEAT_PMUv3_EXT32 is implemented, then x[FEAT_PMUv3_EXT64](feat:FEAT_PMUv3_EXT64) is not implemented.",
          "The following field identifies the presence of FEAT_PMUv3_EXT32:",
          " - PMDEVARCH.ARCHPART.",
          "For more information, see x[Recommended External Interface to the Performance Monitors](#CEGDJDJD|I_recommended_external_interface_to_performace__.fm)."
        ],
        "before": "FEAT_PMUv3_EXT32 indicates the external Performance Monitors and CoreSight registers are implemented as mostly 32-bit registers."
      },
      "name": "FEAT_PMUv3_EXT32",
      "title": "32-bit external interface to the Performance Monitors",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PCSRv8p2"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT32"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3_EXT64"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_PMUv3_EXT is OPTIONAL from Armv8.0.",
          "If FEAT_PMUv3_EXT is implemented, then x[FEAT_PMUv3](feat:FEAT_PMUv3) or x[FEAT_PCSRv8p2](feat:FEAT_PCSRv8p2) is implemented.",
          "If FEAT_PMUv3_EXT is implemented, then x[FEAT_PMUv3_EXT32](feat:FEAT_PMUv3_EXT32) or x[FEAT_PMUv3_EXT64](feat:FEAT_PMUv3_EXT64) is implemented."
        ],
        "before": "FEAT_PMUv3_EXT indicates support for external access to the FEAT_PMUv3 and/or FEAT_PCSRv8p2 registers."
      },
      "name": "FEAT_PMUv3_EXT",
      "title": "External interface to the Performance Monitors",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_IVIPT"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_IVIPT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "L1Ip",
                  "instance": null,
                  "name": "CTR_EL0",
                  "slices": null,
                  "state": "AArch64"
                }
              },
              "op": "IN",
              "right": {
                "_type": "AST.Set",
                "values": [
                  {
                    "_type": "Values.Value",
                    "meaning": null,
                    "value": "'10'"
                  },
                  {
                    "_type": "Values.Value",
                    "meaning": null,
                    "value": "'11'"
                  }
                ]
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_IVIPT"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "Types.Field",
                "value": {
                  "field": "L1Ip",
                  "instance": null,
                  "name": "CTR",
                  "slices": null,
                  "state": "AArch32"
                }
              },
              "op": "IN",
              "right": {
                "_type": "AST.Set",
                "values": [
                  {
                    "_type": "Values.Value",
                    "meaning": null,
                    "value": "'10'"
                  },
                  {
                    "_type": "Values.Value",
                    "meaning": null,
                    "value": "'11'"
                  }
                ]
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_IVIPT is mandatory from Armv8.0.",
          "For more information, see:",
          " - x[Instruction caches](#MDSec.Instruction_caches|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[Instruction caches](#BEIIAAIH|G_the_aarch32_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_IVIPT describes any permitted instruction cache implementation. This includes <i>Virtual Index, Physical tag</i> (VIPT) cache policy and <i>Physical Index, Physical Tag</i> (PIPT) cache policy."
      },
      "name": "FEAT_IVIPT",
      "title": "The IVIPT Extension",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETMv4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETMv4"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_ETMv4"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRC_SR"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRC_EXT"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_ETMv4 is OPTIONAL from Armv8.0.",
          "If Armv9.0 is implemented, then x[FEAT_ETMv4](feat:FEAT_ETMv4) is not implemented.",
          "If FEAT_ETMv4 is implemented, then x[FEAT_TRC_SR](feat:FEAT_TRC_SR) or x[FEAT_TRC_EXT](feat:FEAT_TRC_EXT) is implemented.",
          "For more information, see the <i>Arm&#174; Embedded Trace Macrocell Architecture Specification, ETMv4(ARM IHI 0064)</i>."
        ],
        "before": "FEAT_ETMv4 indicates support for the Embedded Trace Macrocell architecture ETMv4."
      },
      "name": "FEAT_ETMv4",
      "title": "Embedded Trace Macrocell version 4",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRC_SR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRC_SR"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETMv4"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETE"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRC_SR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TraceVer",
                      "instance": null,
                      "name": "ID_AA64DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRC_SR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "TraceVer",
                      "instance": null,
                      "name": "EDDFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRC_SR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CopTrc",
                      "instance": null,
                      "name": "ID_DFR0",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_TRC_SR"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "CopTrc",
                      "instance": null,
                      "name": "ID_DFR0_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32, but only when either of these are supported at EL1.",
          "FEAT_TRC_SR is OPTIONAL from Armv8.0.",
          "If FEAT_TRC_SR is implemented, then x[FEAT_ETMv4](feat:FEAT_ETMv4) or x[FEAT_ETE](feat:FEAT_ETE) is implemented.",
          "The following fields identify the presence of FEAT_TRC_SR:",
          " - AArch64-ID_AA64DFR0_EL1.TraceVer.",
          " - ext-EDDFR.TraceVer.",
          " - AArch32-ID_DFR0.CopTrc.",
          " - AArch64-ID_DFR0_EL1.CopTrc."
        ],
        "before": "FEAT_TRC_SR indicates support for System registers for ETMv4 or ETE."
      },
      "name": "FEAT_TRC_SR",
      "title": "Trace System registers",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRC_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_TRC_EXT"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETMv4"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_ETE"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_TRC_EXT is OPTIONAL from Armv8.0.",
          "If FEAT_TRC_EXT is implemented, then x[FEAT_ETMv4](feat:FEAT_ETMv4) or x[FEAT_ETE](feat:FEAT_ETE) is implemented."
        ],
        "before": "FEAT_TRC_EXT indicates support for external access to the ETMv4 or ETE registers."
      },
      "name": "FEAT_TRC_EXT",
      "title": "Trace external registers",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_nTLBPA"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_nTLBPA"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "nTLBPA",
                      "instance": null,
                      "name": "ID_AA64MMFR1_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_nTLBPA"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "nTLBPA",
                      "instance": null,
                      "name": "ID_MMFR5_EL1",
                      "slices": null,
                      "state": "AArch64"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_nTLBPA"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "nTLBPA",
                      "instance": null,
                      "name": "ID_MMFR5",
                      "slices": null,
                      "state": "AArch32"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_nTLBPA is OPTIONAL from Armv8.0.",
          "The following fields identify the presence of FEAT_nTLBPA:",
          " - AArch64-ID_AA64MMFR1_EL1.nTLBPA.",
          " - AArch64-ID_MMFR5_EL1.nTLBPA.",
          " - AArch32-ID_MMFR5.nTLBPA.",
          "For more information, see:",
          " - x[TLB maintenance](#MDSec.TLB_maintenance|D_the_aarch64_virtual_memory_system_architecture.fm).",
          " - x[General TLB maintenance requirements](#CHDECEGG|G_the_aarch32_virtual_memory_system_architecture.fm)."
        ],
        "before": "FEAT_nTLBPA introduces a mechanism to identify if the intermediate caching of translation table walks does not include non-coherent caches of previous valid translation table entries since the last completed TLBI applicable to the PE."
      },
      "name": "FEAT_nTLBPA",
      "title": "Intermediate caching of translation table walks",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PMUVer",
                        "instance": null,
                        "name": "ID_AA64DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 1
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PMUVer",
                        "instance": null,
                        "name": "ID_AA64DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 3
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0_EL1",
                        "slices": null,
                        "state": "AArch64"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_PMUv3"
            },
            "op": "<=>",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0",
                        "slices": null,
                        "state": "AArch32"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": ">=",
                "right": {
                  "_type": "AST.Integer",
                  "value": 3
                }
              },
              "op": "&&",
              "right": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Function",
                  "arguments": [
                    {
                      "_type": "Types.Field",
                      "value": {
                        "field": "PerfMon",
                        "instance": null,
                        "name": "ID_DFR0",
                        "slices": null,
                        "state": "AArch32"
                      }
                    }
                  ],
                  "name": "UInt",
                  "parameters": []
                },
                "op": "<",
                "right": {
                  "_type": "AST.Integer",
                  "value": 15
                }
              }
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_PMUv3"
          },
          "op": "<=>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMUVer",
                      "instance": null,
                      "name": "EDDFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": ">=",
              "right": {
                "_type": "AST.Integer",
                "value": 1
              }
            },
            "op": "&&",
            "right": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.Function",
                "arguments": [
                  {
                    "_type": "Types.Field",
                    "value": {
                      "field": "PMUVer",
                      "instance": null,
                      "name": "EDDFR",
                      "slices": null,
                      "state": "ext"
                    }
                  }
                ],
                "name": "UInt",
                "parameters": []
              },
              "op": "<",
              "right": {
                "_type": "AST.Integer",
                "value": 15
              }
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "This feature is supported in both AArch64 and AArch32 states.",
          "FEAT_PMUv3 is OPTIONAL from Armv8.0.",
          "The following fields identify the presence of FEAT_PMUv3:",
          " - AArch64-ID_AA64DFR0_EL1.PMUVer.",
          " - AArch64-ID_DFR0_EL1.PerfMon.",
          " - AArch32-ID_DFR0.PerfMon.",
          " - ext-EDDFR.PMUVer.",
          "For more information, see x[The Performance Monitors Extension](#BABGEFCF|D_the_performance_monitors_extension.fm)."
        ],
        "before": "The Performance Monitors Extension, FEAT_PMUv3, is an optional non-invasive debug component."
      },
      "name": "FEAT_PMUv3",
      "title": "PMU extension version 3",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL0"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL0"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_EL0 is mandatory from Armv8.0.",
          "If FEAT_EL0 is implemented, then x[FEAT_AA32EL0](feat:FEAT_AA32EL0) or x[FEAT_AA64EL0](feat:FEAT_AA64EL0) is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_EL0",
      "title": "Support for execution at EL0",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL1"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_EL1 is mandatory from Armv8.0.",
          "If FEAT_EL1 is implemented, then x[FEAT_AA32EL1](feat:FEAT_AA32EL1) or x[FEAT_AA64EL1](feat:FEAT_AA64EL1) is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_EL1",
      "title": "Support for execution at EL1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL2"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_EL2 is OPTIONAL from Armv8.0.",
          "If FEAT_EL2 is implemented, then x[FEAT_AA32EL2](feat:FEAT_AA32EL2) or x[FEAT_AA64EL2](feat:FEAT_AA64EL2) is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_EL2",
      "title": "Support for execution at EL2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL3"
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL3"
            }
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_EL3 is OPTIONAL from Armv8.0.",
          "If FEAT_EL3 is implemented, then x[FEAT_AA32EL3](feat:FEAT_AA32EL3) or x[FEAT_AA64EL3](feat:FEAT_AA64EL3) is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_EL3",
      "title": "Support for EL3",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL0"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_AA32 is OPTIONAL.",
          "If FEAT_AA32 is implemented, then x[FEAT_AA32EL0](feat:FEAT_AA32EL0) is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_AA32",
      "title": "PE supports AArch32.",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64"
          },
          "op": "==>",
          "right": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_AA64EL0"
                },
                "op": "||",
                "right": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_AA64EL1"
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL2"
              }
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL3"
            }
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.BinaryOp",
              "left": {
                "_type": "AST.BinaryOp",
                "left": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_AA64EL0"
                },
                "op": "||",
                "right": {
                  "_type": "AST.Identifier",
                  "value": "FEAT_AA64EL1"
                }
              },
              "op": "||",
              "right": {
                "_type": "AST.Identifier",
                "value": "FEAT_AA64EL2"
              }
            },
            "op": "||",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_AA64 is OPTIONAL from Armv8.0.",
          "If FEAT_AA64 is implemented, then x[FEAT_AA64EL0](feat:FEAT_AA64EL0), x[FEAT_AA64EL1](feat:FEAT_AA64EL1), x[FEAT_AA64EL2](feat:FEAT_AA64EL2), or x[FEAT_AA64EL3](feat:FEAT_AA64EL3) is implemented.",
          "When x[FEAT_AA64EL0](feat:FEAT_AA64EL0), x[FEAT_AA64EL1](feat:FEAT_AA64EL1), x[FEAT_AA64EL2](feat:FEAT_AA64EL2), or x[FEAT_AA64EL3](feat:FEAT_AA64EL3) is implemented, FEAT_AA64 is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_AA64",
      "title": "PE uses AArch64 after last reboot",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_AA32EL0 is OPTIONAL from Armv8.0.",
          "If FEAT_AA32EL0 is implemented, then x[FEAT_EL0](feat:FEAT_EL0) is implemented.",
          "If FEAT_AA32EL0 is implemented, then x[FEAT_AA32](feat:FEAT_AA32) is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_AA32EL0",
      "title": "Support for AArch32 at EL0",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.UnaryOp",
            "expr": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL1"
            },
            "op": "!"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL1"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_AA32EL1 is OPTIONAL from Armv8.0.",
          "If Armv9.0 is implemented, then x[FEAT_AA32EL1](feat:FEAT_AA32EL1) is not implemented.",
          "If FEAT_AA32EL1 is implemented, then x[FEAT_AA32EL0](feat:FEAT_AA32EL0) is implemented.",
          "If FEAT_AA32EL1 is implemented, then x[FEAT_EL1](feat:FEAT_EL1) is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_AA32EL1",
      "title": "Support for AArch32 at EL1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL2"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_AA32EL2 is OPTIONAL from Armv8.0.",
          "If FEAT_AA32EL2 is implemented, then x[FEAT_AA32EL1](feat:FEAT_AA32EL1) is implemented.",
          "If FEAT_AA32EL2 is implemented, then x[FEAT_EL2](feat:FEAT_EL2) is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_AA32EL2",
      "title": "Support for AArch32 at EL2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA32EL3"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA32EL3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL3"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_AA32EL3 is OPTIONAL from Armv8.0.",
          "If FEAT_AA32EL3 is implemented, then x[FEAT_AA32EL1](feat:FEAT_AA32EL1) is implemented.",
          "When FEAT_AA32EL3 and x[FEAT_EL2](feat:FEAT_EL2) are implemented, x[FEAT_AA32EL2](feat:FEAT_AA32EL2) is implemented.",
          "If FEAT_AA32EL3 is implemented, then x[FEAT_EL3](feat:FEAT_EL3) is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_AA32EL3",
      "title": "Support for AArch32 at EL3",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL0"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_AA64EL0 is OPTIONAL from Armv8.0.",
          "FEAT_AA64EL0 is mandatory from Armv9.0.",
          "If FEAT_AA64EL0 is implemented, then x[FEAT_AA64EL1](feat:FEAT_AA64EL1) is implemented.",
          "If FEAT_AA64EL0 is implemented, then x[FEAT_EL0](feat:FEAT_EL0) is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_AA64EL0",
      "title": "Support for AArch64 at EL0",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "v9Ap0"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL1"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL1"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_AA64EL1 is OPTIONAL from Armv8.0.",
          "FEAT_AA64EL1 is mandatory from Armv9.0.",
          "If FEAT_AA64EL1 is implemented, then x[FEAT_AA64EL0](feat:FEAT_AA64EL0) is implemented.",
          "When FEAT_AA64EL1 and x[FEAT_EL2](feat:FEAT_EL2) are implemented, x[FEAT_AA64EL2](feat:FEAT_AA64EL2) is implemented.",
          "When FEAT_AA64EL1 and x[FEAT_EL3](feat:FEAT_EL3) are implemented, x[FEAT_AA64EL3](feat:FEAT_AA64EL3) is implemented.",
          "If FEAT_AA64EL1 is implemented, then x[FEAT_EL1](feat:FEAT_EL1) is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_AA64EL1",
      "title": "Support for AArch64 at EL1",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL2"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL3"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL3"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL2"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL2"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_AA64EL2 is OPTIONAL from Armv8.0.",
          "If FEAT_AA64EL2 is implemented, then x[FEAT_AA64EL1](feat:FEAT_AA64EL1) is implemented.",
          "When FEAT_AA64EL2 and x[FEAT_EL3](feat:FEAT_EL3) are implemented, x[FEAT_AA64EL3](feat:FEAT_AA64EL3) is implemented.",
          "If FEAT_AA64EL2 is implemented, then x[FEAT_EL2](feat:FEAT_EL2) is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_AA64EL2",
      "title": "Support for AArch64 at EL2",
      "values": [
        true,
        false
      ]
    },
    {
      "_type": "Parameters.Boolean",
      "configured_by": "user",
      "constraints": [
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "v8Ap0"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL1"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.BinaryOp",
            "left": {
              "_type": "AST.Identifier",
              "value": "FEAT_AA64EL3"
            },
            "op": "&&",
            "right": {
              "_type": "AST.Identifier",
              "value": "FEAT_EL2"
            }
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL2"
          }
        },
        {
          "_type": "AST.BinaryOp",
          "left": {
            "_type": "AST.Identifier",
            "value": "FEAT_AA64EL3"
          },
          "op": "==>",
          "right": {
            "_type": "AST.Identifier",
            "value": "FEAT_EL3"
          }
        }
      ],
      "description": {
        "_type": "Description",
        "after": [
          "FEAT_AA64EL3 is OPTIONAL from Armv8.0.",
          "If FEAT_AA64EL3 is implemented, then x[FEAT_AA64EL1](feat:FEAT_AA64EL1) is implemented.",
          "When FEAT_AA64EL3 and x[FEAT_EL2](feat:FEAT_EL2) are implemented, x[FEAT_AA64EL2](feat:FEAT_AA64EL2) is implemented.",
          "If FEAT_AA64EL3 is implemented, then x[FEAT_EL3](feat:FEAT_EL3) is implemented.",
          " "
        ],
        "before": null
      },
      "name": "FEAT_AA64EL3",
      "title": "Support for AArch64 at EL3",
      "values": [
        true,
        false
      ]
    }
  ]
}