Rev 5270 | Rev 6934 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5270 | Rev 6082 | ||
---|---|---|---|
Line 10... | Line 10... | ||
10 | 10 | ||
11 | #ifndef _ASM_X86_DISABLED_FEATURES_H |
11 | #ifndef _ASM_X86_DISABLED_FEATURES_H |
12 | #include |
12 | #include |
Line 13... | Line 13... | ||
13 | #endif |
13 | #endif |
14 | 14 | ||
Line 15... | Line 15... | ||
15 | #define NCAPINTS 11 /* N 32-bit words worth of info */ |
15 | #define NCAPINTS 14 /* N 32-bit words worth of info */ |
16 | #define NBUGINTS 1 /* N 32-bit bug flags */ |
16 | #define NBUGINTS 1 /* N 32-bit bug flags */ |
17 | 17 | ||
Line 117... | Line 117... | ||
117 | #define X86_FEATURE_SMX ( 4*32+ 6) /* Safer mode */ |
117 | #define X86_FEATURE_SMX ( 4*32+ 6) /* Safer mode */ |
118 | #define X86_FEATURE_EST ( 4*32+ 7) /* Enhanced SpeedStep */ |
118 | #define X86_FEATURE_EST ( 4*32+ 7) /* Enhanced SpeedStep */ |
119 | #define X86_FEATURE_TM2 ( 4*32+ 8) /* Thermal Monitor 2 */ |
119 | #define X86_FEATURE_TM2 ( 4*32+ 8) /* Thermal Monitor 2 */ |
120 | #define X86_FEATURE_SSSE3 ( 4*32+ 9) /* Supplemental SSE-3 */ |
120 | #define X86_FEATURE_SSSE3 ( 4*32+ 9) /* Supplemental SSE-3 */ |
121 | #define X86_FEATURE_CID ( 4*32+10) /* Context ID */ |
121 | #define X86_FEATURE_CID ( 4*32+10) /* Context ID */ |
- | 122 | #define X86_FEATURE_SDBG ( 4*32+11) /* Silicon Debug */ |
|
122 | #define X86_FEATURE_FMA ( 4*32+12) /* Fused multiply-add */ |
123 | #define X86_FEATURE_FMA ( 4*32+12) /* Fused multiply-add */ |
123 | #define X86_FEATURE_CX16 ( 4*32+13) /* CMPXCHG16B */ |
124 | #define X86_FEATURE_CX16 ( 4*32+13) /* CMPXCHG16B */ |
124 | #define X86_FEATURE_XTPR ( 4*32+14) /* Send Task Priority Messages */ |
125 | #define X86_FEATURE_XTPR ( 4*32+14) /* Send Task Priority Messages */ |
125 | #define X86_FEATURE_PDCM ( 4*32+15) /* Performance Capabilities */ |
126 | #define X86_FEATURE_PDCM ( 4*32+15) /* Performance Capabilities */ |
126 | #define X86_FEATURE_PCID ( 4*32+17) /* Process Context Identifiers */ |
127 | #define X86_FEATURE_PCID ( 4*32+17) /* Process Context Identifiers */ |
Line 172... | Line 173... | ||
172 | #define X86_FEATURE_NODEID_MSR ( 6*32+19) /* NodeId MSR */ |
173 | #define X86_FEATURE_NODEID_MSR ( 6*32+19) /* NodeId MSR */ |
173 | #define X86_FEATURE_TBM ( 6*32+21) /* trailing bit manipulations */ |
174 | #define X86_FEATURE_TBM ( 6*32+21) /* trailing bit manipulations */ |
174 | #define X86_FEATURE_TOPOEXT ( 6*32+22) /* topology extensions CPUID leafs */ |
175 | #define X86_FEATURE_TOPOEXT ( 6*32+22) /* topology extensions CPUID leafs */ |
175 | #define X86_FEATURE_PERFCTR_CORE ( 6*32+23) /* core performance counter extensions */ |
176 | #define X86_FEATURE_PERFCTR_CORE ( 6*32+23) /* core performance counter extensions */ |
176 | #define X86_FEATURE_PERFCTR_NB ( 6*32+24) /* NB performance counter extensions */ |
177 | #define X86_FEATURE_PERFCTR_NB ( 6*32+24) /* NB performance counter extensions */ |
- | 178 | #define X86_FEATURE_BPEXT (6*32+26) /* data breakpoint extension */ |
|
177 | #define X86_FEATURE_PERFCTR_L2 ( 6*32+28) /* L2 performance counter extensions */ |
179 | #define X86_FEATURE_PERFCTR_L2 ( 6*32+28) /* L2 performance counter extensions */ |
- | 180 | #define X86_FEATURE_MWAITX ( 6*32+29) /* MWAIT extension (MONITORX/MWAITX) */ |
|
Line 178... | Line 181... | ||
178 | 181 | ||
179 | /* |
182 | /* |
180 | * Auxiliary flags: Linux defined - For features scattered in various |
183 | * Auxiliary flags: Linux defined - For features scattered in various |
181 | * CPUID levels like 0x6, 0xA etc, word 7 |
184 | * CPUID levels like 0x6, 0xA etc, word 7 |
Line 188... | Line 191... | ||
188 | #define X86_FEATURE_PTS ( 7*32+ 6) /* Intel Package Thermal Status */ |
191 | #define X86_FEATURE_PTS ( 7*32+ 6) /* Intel Package Thermal Status */ |
189 | #define X86_FEATURE_DTHERM ( 7*32+ 7) /* Digital Thermal Sensor */ |
192 | #define X86_FEATURE_DTHERM ( 7*32+ 7) /* Digital Thermal Sensor */ |
190 | #define X86_FEATURE_HW_PSTATE ( 7*32+ 8) /* AMD HW-PState */ |
193 | #define X86_FEATURE_HW_PSTATE ( 7*32+ 8) /* AMD HW-PState */ |
191 | #define X86_FEATURE_PROC_FEEDBACK ( 7*32+ 9) /* AMD ProcFeedbackInterface */ |
194 | #define X86_FEATURE_PROC_FEEDBACK ( 7*32+ 9) /* AMD ProcFeedbackInterface */ |
192 | #define X86_FEATURE_HWP ( 7*32+ 10) /* "hwp" Intel HWP */ |
195 | #define X86_FEATURE_HWP ( 7*32+ 10) /* "hwp" Intel HWP */ |
193 | #define X86_FEATURE_HWP_NOITFY ( 7*32+ 11) /* Intel HWP_NOTIFY */ |
196 | #define X86_FEATURE_HWP_NOTIFY ( 7*32+ 11) /* Intel HWP_NOTIFY */ |
194 | #define X86_FEATURE_HWP_ACT_WINDOW ( 7*32+ 12) /* Intel HWP_ACT_WINDOW */ |
197 | #define X86_FEATURE_HWP_ACT_WINDOW ( 7*32+ 12) /* Intel HWP_ACT_WINDOW */ |
195 | #define X86_FEATURE_HWP_EPP ( 7*32+13) /* Intel HWP_EPP */ |
198 | #define X86_FEATURE_HWP_EPP ( 7*32+13) /* Intel HWP_EPP */ |
196 | #define X86_FEATURE_HWP_PKG_REQ ( 7*32+14) /* Intel HWP_PKG_REQ */ |
199 | #define X86_FEATURE_HWP_PKG_REQ ( 7*32+14) /* Intel HWP_PKG_REQ */ |
- | 200 | #define X86_FEATURE_INTEL_PT ( 7*32+15) /* Intel Processor Trace */ |
|
Line 197... | Line 201... | ||
197 | 201 | ||
198 | /* Virtualization flags: Linux defined, word 8 */ |
202 | /* Virtualization flags: Linux defined, word 8 */ |
199 | #define X86_FEATURE_TPR_SHADOW ( 8*32+ 0) /* Intel TPR Shadow */ |
203 | #define X86_FEATURE_TPR_SHADOW ( 8*32+ 0) /* Intel TPR Shadow */ |
200 | #define X86_FEATURE_VNMI ( 8*32+ 1) /* Intel Virtual NMI */ |
204 | #define X86_FEATURE_VNMI ( 8*32+ 1) /* Intel Virtual NMI */ |
Line 210... | Line 214... | ||
210 | #define X86_FEATURE_FLUSHBYASID ( 8*32+11) /* AMD flush-by-ASID support */ |
214 | #define X86_FEATURE_FLUSHBYASID ( 8*32+11) /* AMD flush-by-ASID support */ |
211 | #define X86_FEATURE_DECODEASSISTS ( 8*32+12) /* AMD Decode Assists support */ |
215 | #define X86_FEATURE_DECODEASSISTS ( 8*32+12) /* AMD Decode Assists support */ |
212 | #define X86_FEATURE_PAUSEFILTER ( 8*32+13) /* AMD filtered pause intercept */ |
216 | #define X86_FEATURE_PAUSEFILTER ( 8*32+13) /* AMD filtered pause intercept */ |
213 | #define X86_FEATURE_PFTHRESHOLD ( 8*32+14) /* AMD pause filter threshold */ |
217 | #define X86_FEATURE_PFTHRESHOLD ( 8*32+14) /* AMD pause filter threshold */ |
214 | #define X86_FEATURE_VMMCALL ( 8*32+15) /* Prefer vmmcall to vmcall */ |
218 | #define X86_FEATURE_VMMCALL ( 8*32+15) /* Prefer vmmcall to vmcall */ |
- | 219 | #define X86_FEATURE_XENPV ( 8*32+16) /* "" Xen paravirtual guest */ |
|
Line 215... | Line 220... | ||
215 | 220 | ||
216 | 221 | ||
217 | /* Intel-defined CPU features, CPUID level 0x00000007:0 (ebx), word 9 */ |
222 | /* Intel-defined CPU features, CPUID level 0x00000007:0 (ebx), word 9 */ |
Line 223... | Line 228... | ||
223 | #define X86_FEATURE_SMEP ( 9*32+ 7) /* Supervisor Mode Execution Protection */ |
228 | #define X86_FEATURE_SMEP ( 9*32+ 7) /* Supervisor Mode Execution Protection */ |
224 | #define X86_FEATURE_BMI2 ( 9*32+ 8) /* 2nd group bit manipulation extensions */ |
229 | #define X86_FEATURE_BMI2 ( 9*32+ 8) /* 2nd group bit manipulation extensions */ |
225 | #define X86_FEATURE_ERMS ( 9*32+ 9) /* Enhanced REP MOVSB/STOSB */ |
230 | #define X86_FEATURE_ERMS ( 9*32+ 9) /* Enhanced REP MOVSB/STOSB */ |
226 | #define X86_FEATURE_INVPCID ( 9*32+10) /* Invalidate Processor Context ID */ |
231 | #define X86_FEATURE_INVPCID ( 9*32+10) /* Invalidate Processor Context ID */ |
227 | #define X86_FEATURE_RTM ( 9*32+11) /* Restricted Transactional Memory */ |
232 | #define X86_FEATURE_RTM ( 9*32+11) /* Restricted Transactional Memory */ |
- | 233 | #define X86_FEATURE_CQM ( 9*32+12) /* Cache QoS Monitoring */ |
|
228 | #define X86_FEATURE_MPX ( 9*32+14) /* Memory Protection Extension */ |
234 | #define X86_FEATURE_MPX ( 9*32+14) /* Memory Protection Extension */ |
229 | #define X86_FEATURE_AVX512F ( 9*32+16) /* AVX-512 Foundation */ |
235 | #define X86_FEATURE_AVX512F ( 9*32+16) /* AVX-512 Foundation */ |
230 | #define X86_FEATURE_RDSEED ( 9*32+18) /* The RDSEED instruction */ |
236 | #define X86_FEATURE_RDSEED ( 9*32+18) /* The RDSEED instruction */ |
231 | #define X86_FEATURE_ADX ( 9*32+19) /* The ADCX and ADOX instructions */ |
237 | #define X86_FEATURE_ADX ( 9*32+19) /* The ADCX and ADOX instructions */ |
232 | #define X86_FEATURE_SMAP ( 9*32+20) /* Supervisor Mode Access Prevention */ |
238 | #define X86_FEATURE_SMAP ( 9*32+20) /* Supervisor Mode Access Prevention */ |
- | 239 | #define X86_FEATURE_PCOMMIT ( 9*32+22) /* PCOMMIT instruction */ |
|
233 | #define X86_FEATURE_CLFLUSHOPT ( 9*32+23) /* CLFLUSHOPT instruction */ |
240 | #define X86_FEATURE_CLFLUSHOPT ( 9*32+23) /* CLFLUSHOPT instruction */ |
- | 241 | #define X86_FEATURE_CLWB ( 9*32+24) /* CLWB instruction */ |
|
234 | #define X86_FEATURE_AVX512PF ( 9*32+26) /* AVX-512 Prefetch */ |
242 | #define X86_FEATURE_AVX512PF ( 9*32+26) /* AVX-512 Prefetch */ |
235 | #define X86_FEATURE_AVX512ER ( 9*32+27) /* AVX-512 Exponential and Reciprocal */ |
243 | #define X86_FEATURE_AVX512ER ( 9*32+27) /* AVX-512 Exponential and Reciprocal */ |
236 | #define X86_FEATURE_AVX512CD ( 9*32+28) /* AVX-512 Conflict Detection */ |
244 | #define X86_FEATURE_AVX512CD ( 9*32+28) /* AVX-512 Conflict Detection */ |
- | 245 | #define X86_FEATURE_SHA_NI ( 9*32+29) /* SHA1/SHA256 Instruction Extensions */ |
|
Line 237... | Line 246... | ||
237 | 246 | ||
238 | /* Extended state features, CPUID level 0x0000000d:1 (eax), word 10 */ |
247 | /* Extended state features, CPUID level 0x0000000d:1 (eax), word 10 */ |
239 | #define X86_FEATURE_XSAVEOPT (10*32+ 0) /* XSAVEOPT */ |
248 | #define X86_FEATURE_XSAVEOPT (10*32+ 0) /* XSAVEOPT */ |
240 | #define X86_FEATURE_XSAVEC (10*32+ 1) /* XSAVEC */ |
249 | #define X86_FEATURE_XSAVEC (10*32+ 1) /* XSAVEC */ |
241 | #define X86_FEATURE_XGETBV1 (10*32+ 2) /* XGETBV with ECX = 1 */ |
250 | #define X86_FEATURE_XGETBV1 (10*32+ 2) /* XGETBV with ECX = 1 */ |
Line -... | Line 251... | ||
- | 251 | #define X86_FEATURE_XSAVES (10*32+ 3) /* XSAVES/XRSTORS */ |
|
- | 252 | ||
- | 253 | /* Intel-defined CPU QoS Sub-leaf, CPUID level 0x0000000F:0 (edx), word 11 */ |
|
- | 254 | #define X86_FEATURE_CQM_LLC (11*32+ 1) /* LLC QoS if 1 */ |
|
- | 255 | ||
- | 256 | /* Intel-defined CPU QoS Sub-leaf, CPUID level 0x0000000F:1 (edx), word 12 */ |
|
- | 257 | #define X86_FEATURE_CQM_OCCUP_LLC (12*32+ 0) /* LLC occupancy monitoring if 1 */ |
|
- | 258 | ||
- | 259 | /* AMD-defined CPU features, CPUID level 0x80000008 (ebx), word 13 */ |
|
242 | #define X86_FEATURE_XSAVES (10*32+ 3) /* XSAVES/XRSTORS */ |
260 | #define X86_FEATURE_CLZERO (13*32+0) /* CLZERO instruction */ |
243 | 261 | ||
244 | /* |
262 | /* |
245 | * BUG word(s) |
263 | * BUG word(s) |
Line 252... | Line 270... | ||
252 | #define X86_BUG_AMD_TLB_MMATCH X86_BUG(3) /* "tlb_mmatch" AMD Erratum 383 */ |
270 | #define X86_BUG_AMD_TLB_MMATCH X86_BUG(3) /* "tlb_mmatch" AMD Erratum 383 */ |
253 | #define X86_BUG_AMD_APIC_C1E X86_BUG(4) /* "apic_c1e" AMD Erratum 400 */ |
271 | #define X86_BUG_AMD_APIC_C1E X86_BUG(4) /* "apic_c1e" AMD Erratum 400 */ |
254 | #define X86_BUG_11AP X86_BUG(5) /* Bad local APIC aka 11AP */ |
272 | #define X86_BUG_11AP X86_BUG(5) /* Bad local APIC aka 11AP */ |
255 | #define X86_BUG_FXSAVE_LEAK X86_BUG(6) /* FXSAVE leaks FOP/FIP/FOP */ |
273 | #define X86_BUG_FXSAVE_LEAK X86_BUG(6) /* FXSAVE leaks FOP/FIP/FOP */ |
256 | #define X86_BUG_CLFLUSH_MONITOR X86_BUG(7) /* AAI65, CLFLUSH required before MONITOR */ |
274 | #define X86_BUG_CLFLUSH_MONITOR X86_BUG(7) /* AAI65, CLFLUSH required before MONITOR */ |
- | 275 | #define X86_BUG_SYSRET_SS_ATTRS X86_BUG(8) /* SYSRET doesn't fix up SS attrs */ |
|
Line 257... | Line 276... | ||
257 | 276 | ||
Line 258... | Line 277... | ||
258 | #if defined(__KERNEL__) && !defined(__ASSEMBLY__) |
277 | #if defined(__KERNEL__) && !defined(__ASSEMBLY__) |
259 | 278 | ||
Line 386... | Line 405... | ||
386 | #define cpu_has_perfctr_l2 boot_cpu_has(X86_FEATURE_PERFCTR_L2) |
405 | #define cpu_has_perfctr_l2 boot_cpu_has(X86_FEATURE_PERFCTR_L2) |
387 | #define cpu_has_cx8 boot_cpu_has(X86_FEATURE_CX8) |
406 | #define cpu_has_cx8 boot_cpu_has(X86_FEATURE_CX8) |
388 | #define cpu_has_cx16 boot_cpu_has(X86_FEATURE_CX16) |
407 | #define cpu_has_cx16 boot_cpu_has(X86_FEATURE_CX16) |
389 | #define cpu_has_eager_fpu boot_cpu_has(X86_FEATURE_EAGER_FPU) |
408 | #define cpu_has_eager_fpu boot_cpu_has(X86_FEATURE_EAGER_FPU) |
390 | #define cpu_has_topoext boot_cpu_has(X86_FEATURE_TOPOEXT) |
409 | #define cpu_has_topoext boot_cpu_has(X86_FEATURE_TOPOEXT) |
- | 410 | #define cpu_has_bpext boot_cpu_has(X86_FEATURE_BPEXT) |
|
Line 391... | Line 411... | ||
391 | 411 | ||
392 | #if __GNUC__ >= 4 |
412 | #if __GNUC__ >= 4 |
393 | extern void warn_pre_alternatives(void); |
413 | extern void warn_pre_alternatives(void); |
Line 414... | Line 434... | ||
414 | " .long 1b - .\n" |
434 | " .long 1b - .\n" |
415 | " .long 0\n" /* no replacement */ |
435 | " .long 0\n" /* no replacement */ |
416 | " .word %P0\n" /* 1: do replace */ |
436 | " .word %P0\n" /* 1: do replace */ |
417 | " .byte 2b - 1b\n" /* source len */ |
437 | " .byte 2b - 1b\n" /* source len */ |
418 | " .byte 0\n" /* replacement len */ |
438 | " .byte 0\n" /* replacement len */ |
- | 439 | " .byte 0\n" /* pad len */ |
|
419 | ".previous\n" |
440 | ".previous\n" |
420 | /* skipping size check since replacement size = 0 */ |
441 | /* skipping size check since replacement size = 0 */ |
421 | : : "i" (X86_FEATURE_ALWAYS) : : t_warn); |
442 | : : "i" (X86_FEATURE_ALWAYS) : : t_warn); |
Line 422... | Line 443... | ||
422 | 443 | ||
Line 428... | Line 449... | ||
428 | " .long 1b - .\n" |
449 | " .long 1b - .\n" |
429 | " .long 0\n" /* no replacement */ |
450 | " .long 0\n" /* no replacement */ |
430 | " .word %P0\n" /* feature bit */ |
451 | " .word %P0\n" /* feature bit */ |
431 | " .byte 2b - 1b\n" /* source len */ |
452 | " .byte 2b - 1b\n" /* source len */ |
432 | " .byte 0\n" /* replacement len */ |
453 | " .byte 0\n" /* replacement len */ |
- | 454 | " .byte 0\n" /* pad len */ |
|
433 | ".previous\n" |
455 | ".previous\n" |
434 | /* skipping size check since replacement size = 0 */ |
456 | /* skipping size check since replacement size = 0 */ |
435 | : : "i" (bit) : : t_no); |
457 | : : "i" (bit) : : t_no); |
436 | return true; |
458 | return true; |
437 | t_no: |
459 | t_no: |
Line 453... | Line 475... | ||
453 | " .long 1b - .\n" |
475 | " .long 1b - .\n" |
454 | " .long 3f - .\n" |
476 | " .long 3f - .\n" |
455 | " .word %P1\n" /* feature bit */ |
477 | " .word %P1\n" /* feature bit */ |
456 | " .byte 2b - 1b\n" /* source len */ |
478 | " .byte 2b - 1b\n" /* source len */ |
457 | " .byte 4f - 3f\n" /* replacement len */ |
479 | " .byte 4f - 3f\n" /* replacement len */ |
- | 480 | " .byte 0\n" /* pad len */ |
|
458 | ".previous\n" |
481 | ".previous\n" |
459 | ".section .discard,\"aw\",@progbits\n" |
482 | ".section .discard,\"aw\",@progbits\n" |
460 | " .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */ |
483 | " .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */ |
461 | ".previous\n" |
484 | ".previous\n" |
462 | ".section .altinstr_replacement,\"ax\"\n" |
485 | ".section .altinstr_replacement,\"ax\"\n" |
Line 479... | Line 502... | ||
479 | ) |
502 | ) |
Line 480... | Line 503... | ||
480 | 503 | ||
481 | static __always_inline __pure bool _static_cpu_has_safe(u16 bit) |
504 | static __always_inline __pure bool _static_cpu_has_safe(u16 bit) |
482 | { |
505 | { |
483 | #ifdef CC_HAVE_ASM_GOTO |
- | |
484 | /* |
- | |
485 | * We need to spell the jumps to the compiler because, depending on the offset, |
- | |
486 | * the replacement jump can be bigger than the original jump, and this we cannot |
- | |
487 | * have. Thus, we force the jump to the widest, 4-byte, signed relative |
- | |
488 | * offset even though the last would often fit in less bytes. |
- | |
489 | */ |
506 | #ifdef CC_HAVE_ASM_GOTO |
490 | asm_volatile_goto("1: .byte 0xe9\n .long %l[t_dynamic] - 2f\n" |
507 | asm_volatile_goto("1: jmp %l[t_dynamic]\n" |
- | 508 | "2:\n" |
|
- | 509 | ".skip -(((5f-4f) - (2b-1b)) > 0) * " |
|
- | 510 | "((5f-4f) - (2b-1b)),0x90\n" |
|
491 | "2:\n" |
511 | "3:\n" |
492 | ".section .altinstructions,\"a\"\n" |
512 | ".section .altinstructions,\"a\"\n" |
493 | " .long 1b - .\n" /* src offset */ |
513 | " .long 1b - .\n" /* src offset */ |
494 | " .long 3f - .\n" /* repl offset */ |
514 | " .long 4f - .\n" /* repl offset */ |
495 | " .word %P1\n" /* always replace */ |
515 | " .word %P1\n" /* always replace */ |
496 | " .byte 2b - 1b\n" /* src len */ |
516 | " .byte 3b - 1b\n" /* src len */ |
- | 517 | " .byte 5f - 4f\n" /* repl len */ |
|
497 | " .byte 4f - 3f\n" /* repl len */ |
518 | " .byte 3b - 2b\n" /* pad len */ |
498 | ".previous\n" |
519 | ".previous\n" |
499 | ".section .altinstr_replacement,\"ax\"\n" |
520 | ".section .altinstr_replacement,\"ax\"\n" |
500 | "3: .byte 0xe9\n .long %l[t_no] - 2b\n" |
521 | "4: jmp %l[t_no]\n" |
501 | "4:\n" |
522 | "5:\n" |
502 | ".previous\n" |
523 | ".previous\n" |
503 | ".section .altinstructions,\"a\"\n" |
524 | ".section .altinstructions,\"a\"\n" |
504 | " .long 1b - .\n" /* src offset */ |
525 | " .long 1b - .\n" /* src offset */ |
505 | " .long 0\n" /* no replacement */ |
526 | " .long 0\n" /* no replacement */ |
506 | " .word %P0\n" /* feature bit */ |
527 | " .word %P0\n" /* feature bit */ |
507 | " .byte 2b - 1b\n" /* src len */ |
528 | " .byte 3b - 1b\n" /* src len */ |
- | 529 | " .byte 0\n" /* repl len */ |
|
508 | " .byte 0\n" /* repl len */ |
530 | " .byte 0\n" /* pad len */ |
509 | ".previous\n" |
531 | ".previous\n" |
510 | : : "i" (bit), "i" (X86_FEATURE_ALWAYS) |
532 | : : "i" (bit), "i" (X86_FEATURE_ALWAYS) |
511 | : : t_dynamic, t_no); |
533 | : : t_dynamic, t_no); |
512 | return true; |
534 | return true; |
Line 523... | Line 545... | ||
523 | " .long 1b - .\n" /* src offset */ |
545 | " .long 1b - .\n" /* src offset */ |
524 | " .long 3f - .\n" /* repl offset */ |
546 | " .long 3f - .\n" /* repl offset */ |
525 | " .word %P2\n" /* always replace */ |
547 | " .word %P2\n" /* always replace */ |
526 | " .byte 2b - 1b\n" /* source len */ |
548 | " .byte 2b - 1b\n" /* source len */ |
527 | " .byte 4f - 3f\n" /* replacement len */ |
549 | " .byte 4f - 3f\n" /* replacement len */ |
- | 550 | " .byte 0\n" /* pad len */ |
|
528 | ".previous\n" |
551 | ".previous\n" |
529 | ".section .discard,\"aw\",@progbits\n" |
552 | ".section .discard,\"aw\",@progbits\n" |
530 | " .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */ |
553 | " .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */ |
531 | ".previous\n" |
554 | ".previous\n" |
532 | ".section .altinstr_replacement,\"ax\"\n" |
555 | ".section .altinstr_replacement,\"ax\"\n" |
Line 537... | Line 560... | ||
537 | " .long 1b - .\n" /* src offset */ |
560 | " .long 1b - .\n" /* src offset */ |
538 | " .long 5f - .\n" /* repl offset */ |
561 | " .long 5f - .\n" /* repl offset */ |
539 | " .word %P1\n" /* feature bit */ |
562 | " .word %P1\n" /* feature bit */ |
540 | " .byte 4b - 3b\n" /* src len */ |
563 | " .byte 4b - 3b\n" /* src len */ |
541 | " .byte 6f - 5f\n" /* repl len */ |
564 | " .byte 6f - 5f\n" /* repl len */ |
- | 565 | " .byte 0\n" /* pad len */ |
|
542 | ".previous\n" |
566 | ".previous\n" |
543 | ".section .discard,\"aw\",@progbits\n" |
567 | ".section .discard,\"aw\",@progbits\n" |
544 | " .byte 0xff + (6f-5f) - (4b-3b)\n" /* size check */ |
568 | " .byte 0xff + (6f-5f) - (4b-3b)\n" /* size check */ |
545 | ".previous\n" |
569 | ".previous\n" |
546 | ".section .altinstr_replacement,\"ax\"\n" |
570 | ".section .altinstr_replacement,\"ax\"\n" |