Disclaimer
Highly likely that author is an illiterate, inattentive, and incompetent lazy person with a poor imagination - therefore his hypotheses may be questionable, ideas delusional and his analysis simply incorrect. Also maybe I still haven't mastered ida pro in 28 years so extracted data can be incomplete/have missed parts. As always all code on perl and therefore offends the aesthetic feelings of believers
Prior works
- Official PTX ISA. We all know than nvidia is evil and paranoid, so this document also incomplete and maliciously conceals information. Proofs are somewhere below in this text
- ANTLR ptx grammar - very outdated, based on cuda-waste parser from 2010
- infamous zluda. It's enough to look at their AST to understand that they support at best a third of the instructions
- nvopen-tools by Grigory Evko. AI generated slop, but at least we can borrow from chapter 7 format of instructions and decoding scheme for arguments
So as you can see there is no machine readable grammar for modern PTX, Why this is important at all? Well, according to "Official guide to inline PTX"
The compiler front end does not parse the asm() statement template string and does not know what it means or even whether it is valid PTX input
Therefore you can successfully compile your buggy code to PTX and suddenly got mysterious errors during dynamic loading over JIT. Plus I always suspected that nvidia hides as much information from us as possible
So I started with some disassembly of ptxas version V10.1.243 from sdk 13.1 looking for PTX instruction names (encrypted btw)
Data extracting
Instruction attributes dynamically filled in two places
Please don't ask me why there are 2 separate places. More importantly that code from both looks uniform