diff mbox series

[U-Boot] x86: simplify ljmp to 32-bit code

Message ID 20191203052858.23798-1-masahiroy@kernel.org
State Accepted
Delegated to: Bin Meng
Headers show
Series [U-Boot] x86: simplify ljmp to 32-bit code | expand

Commit Message

Masahiro Yamada Dec. 3, 2019, 5:28 a.m. UTC
You can directly specify the label as the operand for ljmp.

This commit saves 4-byte code.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---

 arch/x86/cpu/start16.S | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

Comments

Bin Meng Dec. 8, 2019, 10:43 a.m. UTC | #1
Hi Masahiro,

On Tue, Dec 3, 2019 at 1:29 PM Masahiro Yamada <masahiroy@kernel.org> wrote:
>
> You can directly specify the label as the operand for ljmp.
>
> This commit saves 4-byte code.
>
> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> ---
>
>  arch/x86/cpu/start16.S | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/arch/x86/cpu/start16.S b/arch/x86/cpu/start16.S
> index bcabd76741ef..7bad9f3e4d87 100644
> --- a/arch/x86/cpu/start16.S
> +++ b/arch/x86/cpu/start16.S
> @@ -44,10 +44,8 @@ data32 cs    lgdt    gdt_ptr
>  ff:
>
>         /* Finally restore BIST and jump to the 32-bit initialization code */
> -       movw    $code32start, %ax
> -       movw    %ax, %bp
>         movl    %ecx, %eax
> -data32 cs      ljmp    *(%bp)
> +data32 cs      ljmp    code32start

There should be a * before code32start, otherwise gas reportes:

arch/x86/cpu/start16.S: Assembler messages:
arch/x86/cpu/start16.S:48: Warning: indirect ljmp without `*'

>
>         /* 48-bit far pointer */
>  code32start:
> --

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>

Regards,
Bin
Bin Meng Dec. 8, 2019, 11:08 a.m. UTC | #2
On Sun, Dec 8, 2019 at 6:43 PM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> Hi Masahiro,
>
> On Tue, Dec 3, 2019 at 1:29 PM Masahiro Yamada <masahiroy@kernel.org> wrote:
> >
> > You can directly specify the label as the operand for ljmp.
> >
> > This commit saves 4-byte code.
> >
> > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> > ---
> >
> >  arch/x86/cpu/start16.S | 4 +---
> >  1 file changed, 1 insertion(+), 3 deletions(-)
> >
> > diff --git a/arch/x86/cpu/start16.S b/arch/x86/cpu/start16.S
> > index bcabd76741ef..7bad9f3e4d87 100644
> > --- a/arch/x86/cpu/start16.S
> > +++ b/arch/x86/cpu/start16.S
> > @@ -44,10 +44,8 @@ data32 cs    lgdt    gdt_ptr
> >  ff:
> >
> >         /* Finally restore BIST and jump to the 32-bit initialization code */
> > -       movw    $code32start, %ax
> > -       movw    %ax, %bp
> >         movl    %ecx, %eax
> > -data32 cs      ljmp    *(%bp)
> > +data32 cs      ljmp    code32start
>
> There should be a * before code32start, otherwise gas reportes:
>
> arch/x86/cpu/start16.S: Assembler messages:
> arch/x86/cpu/start16.S:48: Warning: indirect ljmp without `*'

fixed the warning by adding * before code32start

>
> >
> >         /* 48-bit far pointer */
> >  code32start:
> > --
>
> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
> Tested-by: Bin Meng <bmeng.cn@gmail.com>

and applied to u-boot-x86, thanks!
diff mbox series

Patch

diff --git a/arch/x86/cpu/start16.S b/arch/x86/cpu/start16.S
index bcabd76741ef..7bad9f3e4d87 100644
--- a/arch/x86/cpu/start16.S
+++ b/arch/x86/cpu/start16.S
@@ -44,10 +44,8 @@  data32 cs	lgdt	gdt_ptr
 ff:
 
 	/* Finally restore BIST and jump to the 32-bit initialization code */
-	movw	$code32start, %ax
-	movw	%ax, %bp
 	movl	%ecx, %eax
-data32 cs	ljmp	*(%bp)
+data32 cs	ljmp	code32start
 
 	/* 48-bit far pointer */
 code32start: