s390
Smallest UTF32 to UTF8 converter
by
Bastian Blank
—
last modified
Sep 13, 2008 12:30 PM
I found some weird opcodes in the s390 instruction set some time ago. I finally want to use it as I have access to such a machine. The result is rather slim:
.globl cu41
.type cu41, @function
cu41:
.L2:
cu41 %r2,%r4
ipm %r1
srl %r1,28
chi %r1,3
je .L2
ltr %r1,%r1
je .L3
lcr %r1,%r1
lgfr %r3,%r1
.L3:
lgr %r2,%r3
br %r14
The cu41 opcode translates UTF32 to UTF8. Each "parameter" is a register pair [1], which describes address and length of the buffer. This opcode will return after a not specified number of translated characters. The rest is boiler plate code for condition code checking. The loop makes sure that anything is converted within the function unless another error occured.
| [1] | An even pair. gcc is not yet able to allocate such pairs on its own, so it is hardcoded. |
S390 assembler
by
Bastian Blank
—
last modified
Sep 18, 2006 07:55 AM
I just take a look into the opcodes list of binutils for s390 and found the following entries:
b9b1 cu24 RRF_M0RR "convert utf-16 to utf-32" z9-109 zarch b2a6 cu21 RRF_M0RR "convert utf-16 to utf-8" z9-109 zarch b2a6 cuutf RRF_M0RR "convert unicode to utf-8" z9-109 zarch b9b3 cu42 RRF_M0RR "convert utf-32 to utf-16" z9-109 zarch b9b2 cu41 RRF_M0RR "convert utf-32 to utf-8" z9-109 zarch b2a7 cu12 RRF_M0RR "convert utf-8 to utf-16" z9-109 zarch b2a7 cutfu RRF_M0RR "convert utf-8 to unicode" z9-109 zarch b9b0 cu14 RRF_M0RR "convert utf-8 to utf-32" z9-109 zarch
Since z9-109, it have own opcodes to convert between the different types of unicode.
