Subversion Repositories Kolibri OS

Rev

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"