mulhi


Multiplies half-word Immediate.

[Syntax]

-

mulhi imm, reg1, reg2

 

The following can be specified for imm:

-

Absolute expression having a value of up to 16 bitsNote

-

Relative expression

-

Either of the above expressions with HIGHW, LOWW, or HIGHW1 applied

Note

The assembler does not check whether the value of the expression exceeds 16 bits. The generated mulhi machine instruction performs the operation by using the lower 16 bits.

[Function]

Multiplies the value of the absolute expression, relative expression, or expression with HIGHW, LOWW, or HIGHW1 applied specified by the first operand by the value of the register specified by the second operand, and stores the result in the register specified by the third operand.

[Description]

-

If the following is specified for imm, the assembler generates one mulhi machine instructionNote.

(a)

Absolute expression having a value in the range of -32,768 to +32,767

mulhi   imm16, reg1, reg2
mulhi   imm16, reg1, reg2

(b)

Relative expression having $label for a label having a definition in the sdata/sbss-attribute section

mulhi   $label, reg1, reg2
mulhi   $label, reg1, reg2

(c)

Relative expression having !label or %label

mulhi   !label, reg1, reg2
mulhi   !label, reg1, reg2
mulhi   %label, reg1, reg2
mulhi   %label, reg1, reg2

(d)

Expression with HIGHW, LOWW, or HIGHW1

mulhi   imm16, reg1, reg2
mulhi   imm16, reg1, reg2

Note

The mulhi machine instruction takes an immediate value in the range of -32,768 to +32,767 (0xFFFF8000 to 0x7FFF) as the first operand.

 

-

If the following is specified for imm, the assembler executes instruction expansion to generate multiple machine instructions.

(a)

Absolute expression having a value exceeding the range of -32,768 to +32,767

<1>

If all the lower 16 bits of the value of imm are 0

If reg2 is the same as reg1

mulhi   imm, reg1, reg2
movhi   HIGHW(imm), r0, r1
mulh    r1, reg2

Else

mulhi   imm, reg1, reg2
movhi   HIGHW(imm), r0, reg2
mulh    reg1, reg2

<2>

Else

If reg2 is the same as reg1

mulhi   imm, reg1, reg2
mov     imm, r1
mulh    r1, reg2

Else

mulhi   imm, reg1, reg2
mov     imm, reg2
mulh    reg1, reg2

(b)

Relative expression having #label or label, or that having $label for a label having no definition in the sdata/sbss-attribute section

If reg2 is the same as reg1

mulhi   #label, reg1, reg2
mov     #label, r1
mulh    r1, reg2
mulhi   label, reg1, reg2
mov     label, r1
mulh    r1, reg2
mulhi   $label, reg1, reg2
mov     $label, r1
mulh    r1, reg2

Else

mulhi   #label, reg1, reg2
mov     #label, reg2
mulh    reg1, reg2
mulhi   label, reg1, reg2
mov     label, reg2
mulh    reg1, reg2
mulhi   $label, reg1, reg2
mov     $label, reg2
mulh    reg1, reg2

[Flag]

CY

---

OV

---

S

---

Z

---

SAT

---

[Caution]

-

If r0 is specified by the third operand, the assembler outputs the following message and stops assembling.

E0550240 : Illegal operand (cannot use r0 as destination in RH850 mode).