80x86 is/was essentially the 8086 instruction set (from late 1970s) plus "optional" extensions added by different vendors; where a lot of extensions became ubiquitous (effectively "pseudo standards" supported by all vendors after a while); with a cross-licensing agreement used to allow one vendor to provide a compatible implementation of another vendor's extension.
Over time this (all the "optional but ubiquitous" extensions) grew to become awkward. To help fix that; AMD created "AMD64", which is the name given to a large set of different extensions (from different vendors) to form a new base-line. It consists of long mode (a 64-bit extension from AMD, that extends a few different extension from Intel - mainly a 32-bit protected mode extension and a "PAE paging" extension), plus SSE (from Intel), plus SYCALL (from AMD), plus lots of smaller/older things (TSC, CPUID, INVLPG, MSRs, ... - mostly from Intel). Of course the cross-licensing agreement meant that other vendors could implement all of these different extensions (and therefore implement the new "AMD64" base-line); and so both Intel and VIA added support for AMD64 in their CPUs.
Every other ISA is similar in that there's a base standard (e.g. Aarch64) and vendor specific extensions (e.g. the matrix and machine learning accelerators Apple added to their M1 chips). The fundamental difference is that there is no cross-licensing agreement in place for any other ISA (e.g. if Qualcomm wanted to implement Apple's extensions they'll probably end up fighting a legal battle for several years).
The other difference is that 80x86 has a clear way for software to identify optional extensions (via. the cpuid
instruction), which is split into vendor specific ranges (e.g. Intel's extensions/features starting at 0x0000000, hypervisor extensions/features starting at 0x4000000, AMD's extensions/features starting at 0x8000000, Transmeta's starting at 0x8086000, Centaur/VIA's starting at 0xC000000). This allows vendors to add their own extensions whenever they want without causing conflicts; and allows software to work fine on all vendors CPUs (and old CPUs and new CPUs from the same vendor) by asking the CPU which features it supports and then enabling support for the extensions the CPU provides (e.g. crudely like "if( CPU_supports(thing) ) { use_thing(); } else { use_alternative(); }
).
What defines the instruction sets? Is there a universal agreement what what instructions are in which sets or is it decided by convention?
Each vendor defines their own extensions (without wasting 3 years arguing with competitors to end up with a "designed by committee" compromise).
Note that sometimes this means you get competing alternative extensions (e.g. 3DNow vs. SSE, or SYSCALL vs. SYSENTER, or AMD's virtualization extensions vs. Intel's, or...). Rarely one of them becomes officially dead (e.g. 3DNow).
The other thing that's worth mentioning is that, for the ISA itself, there's a strong emphasis on backward compatibility. You can almost guarantee that next year's CPU will still be capable of running 16-bit software from 40 years ago. For better or worse, it's everything else (the OS, the devices, the firmware, ..) and not the ISA or extensions that breaks backward compatibility.