Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • D dynamorio
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 1,467
    • Issues 1,467
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 44
    • Merge requests 44
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • DynamoRIO
  • dynamorio
  • Merge requests
  • !4605

Implement support for decoding instructions with AVX-512 {sae}/{er}

  • Review changes

  • Download
  • Email patches
  • Plain diff
Merged Administrator requested to merge i4555-avx512-sae-er into master Dec 11, 2020
  • Overview 19
  • Commits 10
  • Pipelines 0
  • Changes 3

Created by: khuey

Instructions with {sae} overload the EVEX.b bit to mean suppress-all(-floating-point)-exceptions. Instructions with {er} (which requires {sae}) further overload the EVEX.L/LL bits to specify one of four static embedded rounding modes: {rn-sae}, {rd-sae}, {ru-sae}, {rz-sae} (round nearest, round down, round up, and round zero respectively). When {er} is supported that variant is limited to a single fixed width of registers, though not always ZMM (e.g. the various *SS/*SD instructions).

{sae} and {er} are applicable only to reg/reg forms of instructions. For instructions that support both broadcast forms and {sae} (both of which are controlled by EVEX.b=1) it is the modrm byte that chooses the meaning of EVEX.b (by choosing whether this is a reg/reg or reg/mem instruction). Instructions that support both grow a new entry in the MOD_EXT table to distinguish the two forms. Instructions that only support broadcast or {sae}/{er} use the appropriate slot in the EVEX_Wb_EXT table. Some mechanical support (allowing evex_Wb_extensions to contain MOD_EXT entries and allowing fixed width TYPE_H and TYPE_V entries) is also required.

There's no API for manipulating these flags in this patch. I've merely added decoding support for them. This is enough to decode the relevant instructions that are currently ifdefed out in the binutils tests, though enabling those tests also requires fixing #4566 which I haven't done here.

Assignee
Assign to
Reviewers
Request review from
Time tracking
Source branch: i4555-avx512-sae-er