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