@@ -493,6 +493,10 @@ impl<'tcx> InlineAssemblyGenerator<'_, 'tcx> {
493
493
494
494
fn prologue ( generated_asm : & mut String , arch : InlineAsmArch ) {
495
495
match arch {
496
+ InlineAsmArch :: X86 => {
497
+ generated_asm. push_str ( " push ebp\n " ) ;
498
+ generated_asm. push_str ( " mov ebp,edi\n " ) ;
499
+ }
496
500
InlineAsmArch :: X86_64 => {
497
501
generated_asm. push_str ( " push rbp\n " ) ;
498
502
generated_asm. push_str ( " mov rbp,rdi\n " ) ;
@@ -503,6 +507,10 @@ impl<'tcx> InlineAssemblyGenerator<'_, 'tcx> {
503
507
504
508
fn epilogue ( generated_asm : & mut String , arch : InlineAsmArch ) {
505
509
match arch {
510
+ InlineAsmArch :: X86 => {
511
+ generated_asm. push_str ( " pop ebp\n " ) ;
512
+ generated_asm. push_str ( " ret\n " ) ;
513
+ }
506
514
InlineAsmArch :: X86_64 => {
507
515
generated_asm. push_str ( " pop rbp\n " ) ;
508
516
generated_asm. push_str ( " ret\n " ) ;
@@ -513,7 +521,7 @@ impl<'tcx> InlineAssemblyGenerator<'_, 'tcx> {
513
521
514
522
fn epilogue_noreturn ( generated_asm : & mut String , arch : InlineAsmArch ) {
515
523
match arch {
516
- InlineAsmArch :: X86_64 => {
524
+ InlineAsmArch :: X86 | InlineAsmArch :: X86_64 => {
517
525
generated_asm. push_str ( " ud2\n " ) ;
518
526
}
519
527
_ => unimplemented ! ( "epilogue_noreturn for {:?}" , arch) ,
@@ -527,6 +535,11 @@ impl<'tcx> InlineAssemblyGenerator<'_, 'tcx> {
527
535
offset : Size ,
528
536
) {
529
537
match arch {
538
+ InlineAsmArch :: X86 => {
539
+ write ! ( generated_asm, " mov [ebp+0x{:x}], " , offset. bytes( ) ) . unwrap ( ) ;
540
+ reg. emit ( generated_asm, InlineAsmArch :: X86 , None ) . unwrap ( ) ;
541
+ generated_asm. push ( '\n' ) ;
542
+ }
530
543
InlineAsmArch :: X86_64 => {
531
544
write ! ( generated_asm, " mov [rbp+0x{:x}], " , offset. bytes( ) ) . unwrap ( ) ;
532
545
reg. emit ( generated_asm, InlineAsmArch :: X86_64 , None ) . unwrap ( ) ;
@@ -543,6 +556,11 @@ impl<'tcx> InlineAssemblyGenerator<'_, 'tcx> {
543
556
offset : Size ,
544
557
) {
545
558
match arch {
559
+ InlineAsmArch :: X86 => {
560
+ generated_asm. push_str ( " mov " ) ;
561
+ reg. emit ( generated_asm, InlineAsmArch :: X86 , None ) . unwrap ( ) ;
562
+ writeln ! ( generated_asm, ", [ebp+0x{:x}]" , offset. bytes( ) ) . unwrap ( ) ;
563
+ }
546
564
InlineAsmArch :: X86_64 => {
547
565
generated_asm. push_str ( " mov " ) ;
548
566
reg. emit ( generated_asm, InlineAsmArch :: X86_64 , None ) . unwrap ( ) ;
0 commit comments