.. | .. |
---|
12 | 12 | * stale TLB entries and, especially if we're flushing global |
---|
13 | 13 | * mappings, we don't want the compiler to reorder any subsequent |
---|
14 | 14 | * memory accesses before the TLB flush. |
---|
15 | | - * |
---|
16 | | - * The hex opcode is invpcid (%ecx), %eax in 32-bit mode and |
---|
17 | | - * invpcid (%rcx), %rax in long mode. |
---|
18 | 15 | */ |
---|
19 | | - asm volatile (".byte 0x66, 0x0f, 0x38, 0x82, 0x01" |
---|
20 | | - : : "m" (desc), "a" (type), "c" (&desc) : "memory"); |
---|
| 16 | + asm volatile("invpcid %[desc], %[type]" |
---|
| 17 | + :: [desc] "m" (desc), [type] "r" (type) : "memory"); |
---|
21 | 18 | } |
---|
22 | 19 | |
---|
23 | 20 | #define INVPCID_TYPE_INDIV_ADDR 0 |
---|