17bded2dbSJung-uk Kim#! /usr/bin/env perl
2*b077aed3SPierre Pronchery# Copyright 2012-2021 The OpenSSL Project Authors. All Rights Reserved.
3e71b7053SJung-uk Kim#
4*b077aed3SPierre Pronchery# Licensed under the Apache License 2.0 (the "License").  You may not use
5e71b7053SJung-uk Kim# this file except in compliance with the License.  You can obtain a copy
6e71b7053SJung-uk Kim# in the file LICENSE in the source distribution or at
7e71b7053SJung-uk Kim# https://www.openssl.org/source/license.html
8e71b7053SJung-uk Kim
97bded2dbSJung-uk Kim
107bded2dbSJung-uk Kim# ====================================================================
11e71b7053SJung-uk Kim# Written by David S. Miller and Andy Polyakov.
12e71b7053SJung-uk Kim# The module is licensed under 2-clause BSD
137bded2dbSJung-uk Kim# license. October 2012. All rights reserved.
147bded2dbSJung-uk Kim# ====================================================================
157bded2dbSJung-uk Kim
167bded2dbSJung-uk Kim######################################################################
177bded2dbSJung-uk Kim# Camellia for SPARC T4.
187bded2dbSJung-uk Kim#
197bded2dbSJung-uk Kim# As with AES below results [for aligned data] are virtually identical
20e71b7053SJung-uk Kim# to critical path lengths for 3-cycle instruction latency:
217bded2dbSJung-uk Kim#
227bded2dbSJung-uk Kim#		128-bit key	192/256-
237bded2dbSJung-uk Kim# CBC encrypt	4.14/4.21(*)	5.46/5.52
247bded2dbSJung-uk Kim#			 (*) numbers after slash are for
257bded2dbSJung-uk Kim#			     misaligned data.
267bded2dbSJung-uk Kim#
277bded2dbSJung-uk Kim# As with Intel AES-NI, question is if it's possible to improve
28e71b7053SJung-uk Kim# performance of parallelizable modes by interleaving round
297bded2dbSJung-uk Kim# instructions. In Camellia every instruction is dependent on
307bded2dbSJung-uk Kim# previous, which means that there is place for 2 additional ones
317bded2dbSJung-uk Kim# in between two dependent. Can we expect 3x performance improvement?
327bded2dbSJung-uk Kim# At least one can argue that it should be possible to break 2x
337bded2dbSJung-uk Kim# barrier... For some reason not even 2x appears to be possible:
347bded2dbSJung-uk Kim#
357bded2dbSJung-uk Kim#		128-bit key	192/256-
367bded2dbSJung-uk Kim# CBC decrypt	2.21/2.74	2.99/3.40
377bded2dbSJung-uk Kim# CTR		2.15/2.68(*)	2.93/3.34
387bded2dbSJung-uk Kim#			 (*) numbers after slash are for
397bded2dbSJung-uk Kim#			     misaligned data.
407bded2dbSJung-uk Kim#
417bded2dbSJung-uk Kim# This is for 2x interleave. But compared to 1x interleave CBC decrypt
427bded2dbSJung-uk Kim# improved by ... 0% for 128-bit key, and 11% for 192/256-bit one.
437bded2dbSJung-uk Kim# So that out-of-order execution logic can take non-interleaved code
447bded2dbSJung-uk Kim# to 1.87x, but can't take 2x interleaved one any further. There
457bded2dbSJung-uk Kim# surely is some explanation... As result 3x interleave was not even
467bded2dbSJung-uk Kim# attempted. Instead an effort was made to share specific modes
477bded2dbSJung-uk Kim# implementations with AES module (therefore sparct4_modes.pl).
487bded2dbSJung-uk Kim#
497bded2dbSJung-uk Kim# To anchor to something else, software C implementation processes
507bded2dbSJung-uk Kim# one byte in 38 cycles with 128-bit key on same processor.
517bded2dbSJung-uk Kim
527bded2dbSJung-uk Kim$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
537bded2dbSJung-uk Kimpush(@INC,"${dir}","${dir}../../perlasm");
547bded2dbSJung-uk Kimrequire "sparcv9_modes.pl";
557bded2dbSJung-uk Kim
56*b077aed3SPierre Pronchery$output = pop and open STDOUT,">$output";
577bded2dbSJung-uk Kim
587bded2dbSJung-uk Kim$::evp=1;	# if $evp is set to 0, script generates module with
597bded2dbSJung-uk Kim# Camellia_[en|de]crypt, Camellia_set_key and Camellia_cbc_encrypt
607bded2dbSJung-uk Kim# entry points. These are fully compatible with openssl/camellia.h.
617bded2dbSJung-uk Kim
627bded2dbSJung-uk Kim######################################################################
637bded2dbSJung-uk Kim# single-round subroutines
647bded2dbSJung-uk Kim#
657bded2dbSJung-uk Kim{
667bded2dbSJung-uk Kimmy ($inp,$out,$key,$rounds,$tmp,$mask)=map("%o$_",(0..5));
677bded2dbSJung-uk Kim
687bded2dbSJung-uk Kim$code=<<___;
69*b077aed3SPierre Pronchery#ifndef __ASSEMBLER__
70*b077aed3SPierre Pronchery# define __ASSEMBLER__ 1
71*b077aed3SPierre Pronchery#endif
72*b077aed3SPierre Pronchery#include "crypto/sparc_arch.h"
73e71b7053SJung-uk Kim
747bded2dbSJung-uk Kim.text
757bded2dbSJung-uk Kim
767bded2dbSJung-uk Kim.globl	cmll_t4_encrypt
777bded2dbSJung-uk Kim.align	32
787bded2dbSJung-uk Kimcmll_t4_encrypt:
797bded2dbSJung-uk Kim	andcc		$inp, 7, %g1		! is input aligned?
807bded2dbSJung-uk Kim	andn		$inp, 7, $inp
817bded2dbSJung-uk Kim
827bded2dbSJung-uk Kim	ldx		[$key + 0], %g4
837bded2dbSJung-uk Kim	ldx		[$key + 8], %g5
847bded2dbSJung-uk Kim
857bded2dbSJung-uk Kim	ldx		[$inp + 0], %o4
867bded2dbSJung-uk Kim	bz,pt		%icc, 1f
877bded2dbSJung-uk Kim	ldx		[$inp + 8], %o5
887bded2dbSJung-uk Kim	ldx		[$inp + 16], $inp
897bded2dbSJung-uk Kim	sll		%g1, 3, %g1
907bded2dbSJung-uk Kim	sub		%g0, %g1, %o3
917bded2dbSJung-uk Kim	sllx		%o4, %g1, %o4
927bded2dbSJung-uk Kim	sllx		%o5, %g1, %g1
937bded2dbSJung-uk Kim	srlx		%o5, %o3, %o5
947bded2dbSJung-uk Kim	srlx		$inp, %o3, %o3
957bded2dbSJung-uk Kim	or		%o5, %o4, %o4
967bded2dbSJung-uk Kim	or		%o3, %g1, %o5
977bded2dbSJung-uk Kim1:
987bded2dbSJung-uk Kim	ld		[$key + 272], $rounds	! grandRounds, 3 or 4
997bded2dbSJung-uk Kim	ldd		[$key + 16], %f12
1007bded2dbSJung-uk Kim	ldd		[$key + 24], %f14
1017bded2dbSJung-uk Kim	xor		%g4, %o4, %o4
1027bded2dbSJung-uk Kim	xor		%g5, %o5, %o5
1037bded2dbSJung-uk Kim	ldd		[$key + 32], %f16
1047bded2dbSJung-uk Kim	ldd		[$key + 40], %f18
1057bded2dbSJung-uk Kim	movxtod		%o4, %f0
1067bded2dbSJung-uk Kim	movxtod		%o5, %f2
1077bded2dbSJung-uk Kim	ldd		[$key + 48], %f20
1087bded2dbSJung-uk Kim	ldd		[$key + 56], %f22
1097bded2dbSJung-uk Kim	sub		$rounds, 1, $rounds
1107bded2dbSJung-uk Kim	ldd		[$key + 64], %f24
1117bded2dbSJung-uk Kim	ldd		[$key + 72], %f26
1127bded2dbSJung-uk Kim	add		$key, 80, $key
1137bded2dbSJung-uk Kim
1147bded2dbSJung-uk Kim.Lenc:
1157bded2dbSJung-uk Kim	camellia_f	%f12, %f2, %f0, %f2
1167bded2dbSJung-uk Kim	ldd		[$key + 0], %f12
1177bded2dbSJung-uk Kim	sub		$rounds,1,$rounds
1187bded2dbSJung-uk Kim	camellia_f	%f14, %f0, %f2, %f0
1197bded2dbSJung-uk Kim	ldd		[$key + 8], %f14
1207bded2dbSJung-uk Kim	camellia_f	%f16, %f2, %f0, %f2
1217bded2dbSJung-uk Kim	ldd		[$key + 16], %f16
1227bded2dbSJung-uk Kim	camellia_f	%f18, %f0, %f2, %f0
1237bded2dbSJung-uk Kim	ldd		[$key + 24], %f18
1247bded2dbSJung-uk Kim	camellia_f	%f20, %f2, %f0, %f2
1257bded2dbSJung-uk Kim	ldd		[$key + 32], %f20
1267bded2dbSJung-uk Kim	camellia_f	%f22, %f0, %f2, %f0
1277bded2dbSJung-uk Kim	ldd		[$key + 40], %f22
1287bded2dbSJung-uk Kim	camellia_fl	%f24, %f0, %f0
1297bded2dbSJung-uk Kim	ldd		[$key + 48], %f24
1307bded2dbSJung-uk Kim	camellia_fli	%f26, %f2, %f2
1317bded2dbSJung-uk Kim	ldd		[$key + 56], %f26
1327bded2dbSJung-uk Kim	brnz,pt		$rounds, .Lenc
1337bded2dbSJung-uk Kim	add		$key, 64, $key
1347bded2dbSJung-uk Kim
1357bded2dbSJung-uk Kim	andcc		$out, 7, $tmp		! is output aligned?
1367bded2dbSJung-uk Kim	camellia_f	%f12, %f2, %f0, %f2
1377bded2dbSJung-uk Kim	camellia_f	%f14, %f0, %f2, %f0
1387bded2dbSJung-uk Kim	camellia_f	%f16, %f2, %f0, %f2
1397bded2dbSJung-uk Kim	camellia_f	%f18, %f0, %f2, %f0
1407bded2dbSJung-uk Kim	camellia_f	%f20, %f2, %f0, %f4
1417bded2dbSJung-uk Kim	camellia_f	%f22, %f0, %f4, %f2
1427bded2dbSJung-uk Kim	fxor		%f24, %f4, %f0
1437bded2dbSJung-uk Kim	fxor		%f26, %f2, %f2
1447bded2dbSJung-uk Kim
1457bded2dbSJung-uk Kim	bnz,pn		%icc, 2f
1467bded2dbSJung-uk Kim	nop
1477bded2dbSJung-uk Kim
1487bded2dbSJung-uk Kim	std		%f0, [$out + 0]
1497bded2dbSJung-uk Kim	retl
1507bded2dbSJung-uk Kim	std		%f2, [$out + 8]
1517bded2dbSJung-uk Kim
1527bded2dbSJung-uk Kim2:	alignaddrl	$out, %g0, $out
1537bded2dbSJung-uk Kim	mov		0xff, $mask
1547bded2dbSJung-uk Kim	srl		$mask, $tmp, $mask
1557bded2dbSJung-uk Kim
1567bded2dbSJung-uk Kim	faligndata	%f0, %f0, %f4
1577bded2dbSJung-uk Kim	faligndata	%f0, %f2, %f6
1587bded2dbSJung-uk Kim	faligndata	%f2, %f2, %f8
1597bded2dbSJung-uk Kim
1607bded2dbSJung-uk Kim	stda		%f4, [$out + $mask]0xc0	! partial store
1617bded2dbSJung-uk Kim	std		%f6, [$out + 8]
1627bded2dbSJung-uk Kim	add		$out, 16, $out
1637bded2dbSJung-uk Kim	orn		%g0, $mask, $mask
1647bded2dbSJung-uk Kim	retl
1657bded2dbSJung-uk Kim	stda		%f8, [$out + $mask]0xc0	! partial store
1667bded2dbSJung-uk Kim.type	cmll_t4_encrypt,#function
1677bded2dbSJung-uk Kim.size	cmll_t4_encrypt,.-cmll_t4_encrypt
1687bded2dbSJung-uk Kim
1697bded2dbSJung-uk Kim.globl	cmll_t4_decrypt
1707bded2dbSJung-uk Kim.align	32
1717bded2dbSJung-uk Kimcmll_t4_decrypt:
1727bded2dbSJung-uk Kim	ld		[$key + 272], $rounds	! grandRounds, 3 or 4
1737bded2dbSJung-uk Kim	andcc		$inp, 7, %g1		! is input aligned?
1747bded2dbSJung-uk Kim	andn		$inp, 7, $inp
1757bded2dbSJung-uk Kim
1767bded2dbSJung-uk Kim	sll		$rounds, 6, $rounds
1777bded2dbSJung-uk Kim	add		$rounds, $key, $key
1787bded2dbSJung-uk Kim
1797bded2dbSJung-uk Kim	ldx		[$inp + 0], %o4
1807bded2dbSJung-uk Kim	bz,pt		%icc, 1f
1817bded2dbSJung-uk Kim	ldx		[$inp + 8], %o5
1827bded2dbSJung-uk Kim	ldx		[$inp + 16], $inp
1837bded2dbSJung-uk Kim	sll		%g1, 3, %g1
1847bded2dbSJung-uk Kim	sub		%g0, %g1, %g4
1857bded2dbSJung-uk Kim	sllx		%o4, %g1, %o4
1867bded2dbSJung-uk Kim	sllx		%o5, %g1, %g1
1877bded2dbSJung-uk Kim	srlx		%o5, %g4, %o5
1887bded2dbSJung-uk Kim	srlx		$inp, %g4, %g4
1897bded2dbSJung-uk Kim	or		%o5, %o4, %o4
1907bded2dbSJung-uk Kim	or		%g4, %g1, %o5
1917bded2dbSJung-uk Kim1:
1927bded2dbSJung-uk Kim	ldx		[$key + 0], %g4
1937bded2dbSJung-uk Kim	ldx		[$key + 8], %g5
1947bded2dbSJung-uk Kim	ldd		[$key - 8], %f12
1957bded2dbSJung-uk Kim	ldd		[$key - 16], %f14
1967bded2dbSJung-uk Kim	xor		%g4, %o4, %o4
1977bded2dbSJung-uk Kim	xor		%g5, %o5, %o5
1987bded2dbSJung-uk Kim	ldd		[$key - 24], %f16
1997bded2dbSJung-uk Kim	ldd		[$key - 32], %f18
2007bded2dbSJung-uk Kim	movxtod		%o4, %f0
2017bded2dbSJung-uk Kim	movxtod		%o5, %f2
2027bded2dbSJung-uk Kim	ldd		[$key - 40], %f20
2037bded2dbSJung-uk Kim	ldd		[$key - 48], %f22
2047bded2dbSJung-uk Kim	sub		$rounds, 64, $rounds
2057bded2dbSJung-uk Kim	ldd		[$key - 56], %f24
2067bded2dbSJung-uk Kim	ldd		[$key - 64], %f26
2077bded2dbSJung-uk Kim	sub		$key, 64, $key
2087bded2dbSJung-uk Kim
2097bded2dbSJung-uk Kim.Ldec:
2107bded2dbSJung-uk Kim	camellia_f	%f12, %f2, %f0, %f2
2117bded2dbSJung-uk Kim	ldd		[$key - 8], %f12
2127bded2dbSJung-uk Kim	sub		$rounds, 64, $rounds
2137bded2dbSJung-uk Kim	camellia_f	%f14, %f0, %f2, %f0
2147bded2dbSJung-uk Kim	ldd		[$key - 16], %f14
2157bded2dbSJung-uk Kim	camellia_f	%f16, %f2, %f0, %f2
2167bded2dbSJung-uk Kim	ldd		[$key - 24], %f16
2177bded2dbSJung-uk Kim	camellia_f	%f18, %f0, %f2, %f0
2187bded2dbSJung-uk Kim	ldd		[$key - 32], %f18
2197bded2dbSJung-uk Kim	camellia_f	%f20, %f2, %f0, %f2
2207bded2dbSJung-uk Kim	ldd		[$key - 40], %f20
2217bded2dbSJung-uk Kim	camellia_f	%f22, %f0, %f2, %f0
2227bded2dbSJung-uk Kim	ldd		[$key - 48], %f22
2237bded2dbSJung-uk Kim	camellia_fl	%f24, %f0, %f0
2247bded2dbSJung-uk Kim	ldd		[$key - 56], %f24
2257bded2dbSJung-uk Kim	camellia_fli	%f26, %f2, %f2
2267bded2dbSJung-uk Kim	ldd		[$key - 64], %f26
2277bded2dbSJung-uk Kim	brnz,pt		$rounds, .Ldec
2287bded2dbSJung-uk Kim	sub		$key, 64, $key
2297bded2dbSJung-uk Kim
2307bded2dbSJung-uk Kim	andcc		$out, 7, $tmp		! is output aligned?
2317bded2dbSJung-uk Kim	camellia_f	%f12, %f2, %f0, %f2
2327bded2dbSJung-uk Kim	camellia_f	%f14, %f0, %f2, %f0
2337bded2dbSJung-uk Kim	camellia_f	%f16, %f2, %f0, %f2
2347bded2dbSJung-uk Kim	camellia_f	%f18, %f0, %f2, %f0
2357bded2dbSJung-uk Kim	camellia_f	%f20, %f2, %f0, %f4
2367bded2dbSJung-uk Kim	camellia_f	%f22, %f0, %f4, %f2
2377bded2dbSJung-uk Kim	fxor		%f26, %f4, %f0
2387bded2dbSJung-uk Kim	fxor		%f24, %f2, %f2
2397bded2dbSJung-uk Kim
2407bded2dbSJung-uk Kim	bnz,pn		%icc, 2f
2417bded2dbSJung-uk Kim	nop
2427bded2dbSJung-uk Kim
2437bded2dbSJung-uk Kim	std		%f0, [$out + 0]
2447bded2dbSJung-uk Kim	retl
2457bded2dbSJung-uk Kim	std		%f2, [$out + 8]
2467bded2dbSJung-uk Kim
2477bded2dbSJung-uk Kim2:	alignaddrl	$out, %g0, $out
2487bded2dbSJung-uk Kim	mov		0xff, $mask
2497bded2dbSJung-uk Kim	srl		$mask, $tmp, $mask
2507bded2dbSJung-uk Kim
2517bded2dbSJung-uk Kim	faligndata	%f0, %f0, %f4
2527bded2dbSJung-uk Kim	faligndata	%f0, %f2, %f6
2537bded2dbSJung-uk Kim	faligndata	%f2, %f2, %f8
2547bded2dbSJung-uk Kim
2557bded2dbSJung-uk Kim	stda		%f4, [$out + $mask]0xc0	! partial store
2567bded2dbSJung-uk Kim	std		%f6, [$out + 8]
2577bded2dbSJung-uk Kim	add		$out, 16, $out
2587bded2dbSJung-uk Kim	orn		%g0, $mask, $mask
2597bded2dbSJung-uk Kim	retl
2607bded2dbSJung-uk Kim	stda		%f8, [$out + $mask]0xc0	! partial store
2617bded2dbSJung-uk Kim.type	cmll_t4_decrypt,#function
2627bded2dbSJung-uk Kim.size	cmll_t4_decrypt,.-cmll_t4_decrypt
2637bded2dbSJung-uk Kim___
2647bded2dbSJung-uk Kim}
2657bded2dbSJung-uk Kim
2667bded2dbSJung-uk Kim######################################################################
2677bded2dbSJung-uk Kim# key setup subroutines
2687bded2dbSJung-uk Kim#
2697bded2dbSJung-uk Kim{
2707bded2dbSJung-uk Kimsub ROTL128 {
2717bded2dbSJung-uk Kim  my $rot = shift;
2727bded2dbSJung-uk Kim
2737bded2dbSJung-uk Kim	"srlx	%o4, 64-$rot, %g4\n\t".
2747bded2dbSJung-uk Kim	"sllx	%o4, $rot, %o4\n\t".
2757bded2dbSJung-uk Kim	"srlx	%o5, 64-$rot, %g5\n\t".
2767bded2dbSJung-uk Kim	"sllx	%o5, $rot, %o5\n\t".
2777bded2dbSJung-uk Kim	"or	%o4, %g5, %o4\n\t".
2787bded2dbSJung-uk Kim	"or	%o5, %g4, %o5";
2797bded2dbSJung-uk Kim}
2807bded2dbSJung-uk Kim
2817bded2dbSJung-uk Kimmy ($inp,$bits,$out,$tmp)=map("%o$_",(0..5));
2827bded2dbSJung-uk Kim$code.=<<___;
2837bded2dbSJung-uk Kim.globl	cmll_t4_set_key
2847bded2dbSJung-uk Kim.align	32
2857bded2dbSJung-uk Kimcmll_t4_set_key:
2867bded2dbSJung-uk Kim	and		$inp, 7, $tmp
2877bded2dbSJung-uk Kim	alignaddr	$inp, %g0, $inp
2887bded2dbSJung-uk Kim	cmp		$bits, 192
2897bded2dbSJung-uk Kim	ldd		[$inp + 0], %f0
2907bded2dbSJung-uk Kim	bl,pt		%icc,.L128
2917bded2dbSJung-uk Kim	ldd		[$inp + 8], %f2
2927bded2dbSJung-uk Kim
2937bded2dbSJung-uk Kim	be,pt		%icc,.L192
2947bded2dbSJung-uk Kim	ldd		[$inp + 16], %f4
2957bded2dbSJung-uk Kim
2967bded2dbSJung-uk Kim	brz,pt		$tmp, .L256aligned
2977bded2dbSJung-uk Kim	ldd		[$inp + 24], %f6
2987bded2dbSJung-uk Kim
2997bded2dbSJung-uk Kim	ldd		[$inp + 32], %f8
3007bded2dbSJung-uk Kim	faligndata	%f0, %f2, %f0
3017bded2dbSJung-uk Kim	faligndata	%f2, %f4, %f2
3027bded2dbSJung-uk Kim	faligndata	%f4, %f6, %f4
3037bded2dbSJung-uk Kim	b		.L256aligned
3047bded2dbSJung-uk Kim	faligndata	%f6, %f8, %f6
3057bded2dbSJung-uk Kim
3067bded2dbSJung-uk Kim.align	16
3077bded2dbSJung-uk Kim.L192:
3087bded2dbSJung-uk Kim	brz,a,pt	$tmp, .L256aligned
3097bded2dbSJung-uk Kim	fnot2		%f4, %f6
3107bded2dbSJung-uk Kim
3117bded2dbSJung-uk Kim	ldd		[$inp + 24], %f6
3127bded2dbSJung-uk Kim	nop
3137bded2dbSJung-uk Kim	faligndata	%f0, %f2, %f0
3147bded2dbSJung-uk Kim	faligndata	%f2, %f4, %f2
3157bded2dbSJung-uk Kim	faligndata	%f4, %f6, %f4
3167bded2dbSJung-uk Kim	fnot2		%f4, %f6
3177bded2dbSJung-uk Kim
3187bded2dbSJung-uk Kim.L256aligned:
3197bded2dbSJung-uk Kim	std		%f0, [$out + 0]		! k[0, 1]
3207bded2dbSJung-uk Kim	fsrc2		%f0, %f28
3217bded2dbSJung-uk Kim	std		%f2, [$out + 8]		! k[2, 3]
3227bded2dbSJung-uk Kim	fsrc2		%f2, %f30
3237bded2dbSJung-uk Kim	fxor		%f4, %f0, %f0
3247bded2dbSJung-uk Kim	b		.L128key
3257bded2dbSJung-uk Kim	fxor		%f6, %f2, %f2
3267bded2dbSJung-uk Kim
3277bded2dbSJung-uk Kim.align	16
3287bded2dbSJung-uk Kim.L128:
3297bded2dbSJung-uk Kim	brz,pt		$tmp, .L128aligned
3307bded2dbSJung-uk Kim	nop
3317bded2dbSJung-uk Kim
3327bded2dbSJung-uk Kim	ldd		[$inp + 16], %f4
3337bded2dbSJung-uk Kim	nop
3347bded2dbSJung-uk Kim	faligndata	%f0, %f2, %f0
3357bded2dbSJung-uk Kim	faligndata	%f2, %f4, %f2
3367bded2dbSJung-uk Kim
3377bded2dbSJung-uk Kim.L128aligned:
3387bded2dbSJung-uk Kim	std		%f0, [$out + 0]		! k[0, 1]
3397bded2dbSJung-uk Kim	fsrc2		%f0, %f28
3407bded2dbSJung-uk Kim	std		%f2, [$out + 8]		! k[2, 3]
3417bded2dbSJung-uk Kim	fsrc2		%f2, %f30
3427bded2dbSJung-uk Kim
3437bded2dbSJung-uk Kim.L128key:
3447bded2dbSJung-uk Kim	mov		%o7, %o5
3457bded2dbSJung-uk Kim1:	call		.+8
3467bded2dbSJung-uk Kim	add		%o7, SIGMA-1b, %o4
3477bded2dbSJung-uk Kim	mov		%o5, %o7
3487bded2dbSJung-uk Kim
3497bded2dbSJung-uk Kim	ldd		[%o4 + 0], %f16
3507bded2dbSJung-uk Kim	ldd		[%o4 + 8], %f18
3517bded2dbSJung-uk Kim	ldd		[%o4 + 16], %f20
3527bded2dbSJung-uk Kim	ldd		[%o4 + 24], %f22
3537bded2dbSJung-uk Kim
3547bded2dbSJung-uk Kim	camellia_f	%f16, %f2, %f0, %f2
3557bded2dbSJung-uk Kim	camellia_f	%f18, %f0, %f2, %f0
3567bded2dbSJung-uk Kim	fxor		%f28, %f0, %f0
3577bded2dbSJung-uk Kim	fxor		%f30, %f2, %f2
3587bded2dbSJung-uk Kim	camellia_f	%f20, %f2, %f0, %f2
3597bded2dbSJung-uk Kim	camellia_f	%f22, %f0, %f2, %f0
3607bded2dbSJung-uk Kim
3617bded2dbSJung-uk Kim	bge,pn		%icc, .L256key
3627bded2dbSJung-uk Kim	nop
3637bded2dbSJung-uk Kim	std	%f0, [$out + 0x10]	! k[ 4,  5]
3647bded2dbSJung-uk Kim	std	%f2, [$out + 0x18]	! k[ 6,  7]
3657bded2dbSJung-uk Kim
3667bded2dbSJung-uk Kim	movdtox	%f0, %o4
3677bded2dbSJung-uk Kim	movdtox	%f2, %o5
3687bded2dbSJung-uk Kim	`&ROTL128(15)`
3697bded2dbSJung-uk Kim	stx	%o4, [$out + 0x30]	! k[12, 13]
3707bded2dbSJung-uk Kim	stx	%o5, [$out + 0x38]	! k[14, 15]
3717bded2dbSJung-uk Kim	`&ROTL128(15)`
3727bded2dbSJung-uk Kim	stx	%o4, [$out + 0x40]	! k[16, 17]
3737bded2dbSJung-uk Kim	stx	%o5, [$out + 0x48]	! k[18, 19]
3747bded2dbSJung-uk Kim	`&ROTL128(15)`
3757bded2dbSJung-uk Kim	stx	%o4, [$out + 0x60]	! k[24, 25]
3767bded2dbSJung-uk Kim	`&ROTL128(15)`
3777bded2dbSJung-uk Kim	stx	%o4, [$out + 0x70]	! k[28, 29]
3787bded2dbSJung-uk Kim	stx	%o5, [$out + 0x78]	! k[30, 31]
3797bded2dbSJung-uk Kim	`&ROTL128(34)`
3807bded2dbSJung-uk Kim	stx	%o4, [$out + 0xa0]	! k[40, 41]
3817bded2dbSJung-uk Kim	stx	%o5, [$out + 0xa8]	! k[42, 43]
3827bded2dbSJung-uk Kim	`&ROTL128(17)`
3837bded2dbSJung-uk Kim	stx	%o4, [$out + 0xc0]	! k[48, 49]
3847bded2dbSJung-uk Kim	stx	%o5, [$out + 0xc8]	! k[50, 51]
3857bded2dbSJung-uk Kim
3867bded2dbSJung-uk Kim	movdtox	%f28, %o4		! k[ 0,  1]
3877bded2dbSJung-uk Kim	movdtox	%f30, %o5		! k[ 2,  3]
3887bded2dbSJung-uk Kim	`&ROTL128(15)`
3897bded2dbSJung-uk Kim	stx	%o4, [$out + 0x20]	! k[ 8,  9]
3907bded2dbSJung-uk Kim	stx	%o5, [$out + 0x28]	! k[10, 11]
3917bded2dbSJung-uk Kim	`&ROTL128(30)`
3927bded2dbSJung-uk Kim	stx	%o4, [$out + 0x50]	! k[20, 21]
3937bded2dbSJung-uk Kim	stx	%o5, [$out + 0x58]	! k[22, 23]
3947bded2dbSJung-uk Kim	`&ROTL128(15)`
3957bded2dbSJung-uk Kim	stx	%o5, [$out + 0x68]	! k[26, 27]
3967bded2dbSJung-uk Kim	`&ROTL128(17)`
3977bded2dbSJung-uk Kim	stx	%o4, [$out + 0x80]	! k[32, 33]
3987bded2dbSJung-uk Kim	stx	%o5, [$out + 0x88]	! k[34, 35]
3997bded2dbSJung-uk Kim	`&ROTL128(17)`
4007bded2dbSJung-uk Kim	stx	%o4, [$out + 0x90]	! k[36, 37]
4017bded2dbSJung-uk Kim	stx	%o5, [$out + 0x98]	! k[38, 39]
4027bded2dbSJung-uk Kim	`&ROTL128(17)`
4037bded2dbSJung-uk Kim	stx	%o4, [$out + 0xb0]	! k[44, 45]
4047bded2dbSJung-uk Kim	stx	%o5, [$out + 0xb8]	! k[46, 47]
4057bded2dbSJung-uk Kim
4067bded2dbSJung-uk Kim	mov		3, $tmp
4077bded2dbSJung-uk Kim	st		$tmp, [$out + 0x110]
4087bded2dbSJung-uk Kim	retl
4097bded2dbSJung-uk Kim	xor		%o0, %o0, %o0
4107bded2dbSJung-uk Kim
4117bded2dbSJung-uk Kim.align	16
4127bded2dbSJung-uk Kim.L256key:
4137bded2dbSJung-uk Kim	ldd		[%o4 + 32], %f24
4147bded2dbSJung-uk Kim	ldd		[%o4 + 40], %f26
4157bded2dbSJung-uk Kim
4167bded2dbSJung-uk Kim	std		%f0, [$out + 0x30]	! k[12, 13]
4177bded2dbSJung-uk Kim	std		%f2, [$out + 0x38]	! k[14, 15]
4187bded2dbSJung-uk Kim
4197bded2dbSJung-uk Kim	fxor		%f4, %f0, %f0
4207bded2dbSJung-uk Kim	fxor		%f6, %f2, %f2
4217bded2dbSJung-uk Kim	camellia_f	%f24, %f2, %f0, %f2
4227bded2dbSJung-uk Kim	camellia_f	%f26, %f0, %f2, %f0
4237bded2dbSJung-uk Kim
4247bded2dbSJung-uk Kim	std	%f0, [$out + 0x10]	! k[ 4,  5]
4257bded2dbSJung-uk Kim	std	%f2, [$out + 0x18]	! k[ 6,  7]
4267bded2dbSJung-uk Kim
4277bded2dbSJung-uk Kim	movdtox	%f0, %o4
4287bded2dbSJung-uk Kim	movdtox	%f2, %o5
4297bded2dbSJung-uk Kim	`&ROTL128(30)`
4307bded2dbSJung-uk Kim	stx	%o4, [$out + 0x50]	! k[20, 21]
4317bded2dbSJung-uk Kim	stx	%o5, [$out + 0x58]	! k[22, 23]
4327bded2dbSJung-uk Kim	`&ROTL128(30)`
4337bded2dbSJung-uk Kim	stx	%o4, [$out + 0xa0]	! k[40, 41]
4347bded2dbSJung-uk Kim	stx	%o5, [$out + 0xa8]	! k[42, 43]
4357bded2dbSJung-uk Kim	`&ROTL128(51)`
4367bded2dbSJung-uk Kim	stx	%o4, [$out + 0x100]	! k[64, 65]
4377bded2dbSJung-uk Kim	stx	%o5, [$out + 0x108]	! k[66, 67]
4387bded2dbSJung-uk Kim
4397bded2dbSJung-uk Kim	movdtox	%f4, %o4		! k[ 8,  9]
4407bded2dbSJung-uk Kim	movdtox	%f6, %o5		! k[10, 11]
4417bded2dbSJung-uk Kim	`&ROTL128(15)`
4427bded2dbSJung-uk Kim	stx	%o4, [$out + 0x20]	! k[ 8,  9]
4437bded2dbSJung-uk Kim	stx	%o5, [$out + 0x28]	! k[10, 11]
4447bded2dbSJung-uk Kim	`&ROTL128(15)`
4457bded2dbSJung-uk Kim	stx	%o4, [$out + 0x40]	! k[16, 17]
4467bded2dbSJung-uk Kim	stx	%o5, [$out + 0x48]	! k[18, 19]
4477bded2dbSJung-uk Kim	`&ROTL128(30)`
4487bded2dbSJung-uk Kim	stx	%o4, [$out + 0x90]	! k[36, 37]
4497bded2dbSJung-uk Kim	stx	%o5, [$out + 0x98]	! k[38, 39]
4507bded2dbSJung-uk Kim	`&ROTL128(34)`
4517bded2dbSJung-uk Kim	stx	%o4, [$out + 0xd0]	! k[52, 53]
4527bded2dbSJung-uk Kim	stx	%o5, [$out + 0xd8]	! k[54, 55]
4537bded2dbSJung-uk Kim	ldx	[$out + 0x30], %o4	! k[12, 13]
4547bded2dbSJung-uk Kim	ldx	[$out + 0x38], %o5	! k[14, 15]
4557bded2dbSJung-uk Kim	`&ROTL128(15)`
4567bded2dbSJung-uk Kim	stx	%o4, [$out + 0x30]	! k[12, 13]
4577bded2dbSJung-uk Kim	stx	%o5, [$out + 0x38]	! k[14, 15]
4587bded2dbSJung-uk Kim	`&ROTL128(30)`
4597bded2dbSJung-uk Kim	stx	%o4, [$out + 0x70]	! k[28, 29]
4607bded2dbSJung-uk Kim	stx	%o5, [$out + 0x78]	! k[30, 31]
4617bded2dbSJung-uk Kim	srlx	%o4, 32, %g4
4627bded2dbSJung-uk Kim	srlx	%o5, 32, %g5
4637bded2dbSJung-uk Kim	st	%o4, [$out + 0xc0]	! k[48]
4647bded2dbSJung-uk Kim	st	%g5, [$out + 0xc4]	! k[49]
4657bded2dbSJung-uk Kim	st	%o5, [$out + 0xc8]	! k[50]
4667bded2dbSJung-uk Kim	st	%g4, [$out + 0xcc]	! k[51]
4677bded2dbSJung-uk Kim	`&ROTL128(49)`
4687bded2dbSJung-uk Kim	stx	%o4, [$out + 0xe0]	! k[56, 57]
4697bded2dbSJung-uk Kim	stx	%o5, [$out + 0xe8]	! k[58, 59]
4707bded2dbSJung-uk Kim
4717bded2dbSJung-uk Kim	movdtox	%f28, %o4		! k[ 0,  1]
4727bded2dbSJung-uk Kim	movdtox	%f30, %o5		! k[ 2,  3]
4737bded2dbSJung-uk Kim	`&ROTL128(45)`
4747bded2dbSJung-uk Kim	stx	%o4, [$out + 0x60]	! k[24, 25]
4757bded2dbSJung-uk Kim	stx	%o5, [$out + 0x68]	! k[26, 27]
4767bded2dbSJung-uk Kim	`&ROTL128(15)`
4777bded2dbSJung-uk Kim	stx	%o4, [$out + 0x80]	! k[32, 33]
4787bded2dbSJung-uk Kim	stx	%o5, [$out + 0x88]	! k[34, 35]
4797bded2dbSJung-uk Kim	`&ROTL128(17)`
4807bded2dbSJung-uk Kim	stx	%o4, [$out + 0xb0]	! k[44, 45]
4817bded2dbSJung-uk Kim	stx	%o5, [$out + 0xb8]	! k[46, 47]
4827bded2dbSJung-uk Kim	`&ROTL128(34)`
4837bded2dbSJung-uk Kim	stx	%o4, [$out + 0xf0]	! k[60, 61]
4847bded2dbSJung-uk Kim	stx	%o5, [$out + 0xf8]	! k[62, 63]
4857bded2dbSJung-uk Kim
4867bded2dbSJung-uk Kim	mov		4, $tmp
4877bded2dbSJung-uk Kim	st		$tmp, [$out + 0x110]
4887bded2dbSJung-uk Kim	retl
4897bded2dbSJung-uk Kim	xor		%o0, %o0, %o0
4907bded2dbSJung-uk Kim.type	cmll_t4_set_key,#function
4917bded2dbSJung-uk Kim.size	cmll_t4_set_key,.-cmll_t4_set_key
4927bded2dbSJung-uk Kim.align	32
4937bded2dbSJung-uk KimSIGMA:
4947bded2dbSJung-uk Kim	.long	0xa09e667f, 0x3bcc908b, 0xb67ae858, 0x4caa73b2
4957bded2dbSJung-uk Kim	.long	0xc6ef372f, 0xe94f82be, 0x54ff53a5, 0xf1d36f1c
4967bded2dbSJung-uk Kim	.long	0x10e527fa, 0xde682d1d, 0xb05688c2, 0xb3e6c1fd
4977bded2dbSJung-uk Kim.type	SIGMA,#object
4987bded2dbSJung-uk Kim.size	SIGMA,.-SIGMA
4997bded2dbSJung-uk Kim.asciz	"Camellia for SPARC T4, David S. Miller, Andy Polyakov"
5007bded2dbSJung-uk Kim___
5017bded2dbSJung-uk Kim}
5027bded2dbSJung-uk Kim
5037bded2dbSJung-uk Kim{{{
5047bded2dbSJung-uk Kimmy ($inp,$out,$len,$key,$ivec,$enc)=map("%i$_",(0..5));
5057bded2dbSJung-uk Kimmy ($ileft,$iright,$ooff,$omask,$ivoff)=map("%l$_",(1..7));
5067bded2dbSJung-uk Kim
5077bded2dbSJung-uk Kim$code.=<<___;
5087bded2dbSJung-uk Kim.align	32
5097bded2dbSJung-uk Kim_cmll128_load_enckey:
5107bded2dbSJung-uk Kim	ldx		[$key + 0], %g4
5117bded2dbSJung-uk Kim	ldx		[$key + 8], %g5
5127bded2dbSJung-uk Kim___
5137bded2dbSJung-uk Kimfor ($i=2; $i<26;$i++) {			# load key schedule
5147bded2dbSJung-uk Kim    $code.=<<___;
5157bded2dbSJung-uk Kim	ldd		[$key + `8*$i`], %f`12+2*$i`
5167bded2dbSJung-uk Kim___
5177bded2dbSJung-uk Kim}
5187bded2dbSJung-uk Kim$code.=<<___;
5197bded2dbSJung-uk Kim	retl
5207bded2dbSJung-uk Kim	nop
5217bded2dbSJung-uk Kim.type	_cmll128_load_enckey,#function
5227bded2dbSJung-uk Kim.size	_cmll128_load_enckey,.-_cmll128_load_enckey
5237bded2dbSJung-uk Kim_cmll256_load_enckey=_cmll128_load_enckey
5247bded2dbSJung-uk Kim
5257bded2dbSJung-uk Kim.align	32
5267bded2dbSJung-uk Kim_cmll256_load_deckey:
5277bded2dbSJung-uk Kim	ldd		[$key + 64], %f62
5287bded2dbSJung-uk Kim	ldd		[$key + 72], %f60
5297bded2dbSJung-uk Kim	b		.Load_deckey
5307bded2dbSJung-uk Kim	add		$key, 64, $key
5317bded2dbSJung-uk Kim_cmll128_load_deckey:
5327bded2dbSJung-uk Kim	ldd		[$key + 0], %f60
5337bded2dbSJung-uk Kim	ldd		[$key + 8], %f62
5347bded2dbSJung-uk Kim.Load_deckey:
5357bded2dbSJung-uk Kim___
5367bded2dbSJung-uk Kimfor ($i=2; $i<24;$i++) {			# load key schedule
5377bded2dbSJung-uk Kim    $code.=<<___;
5387bded2dbSJung-uk Kim	ldd		[$key + `8*$i`], %f`62-2*$i`
5397bded2dbSJung-uk Kim___
5407bded2dbSJung-uk Kim}
5417bded2dbSJung-uk Kim$code.=<<___;
5427bded2dbSJung-uk Kim	ldx		[$key + 192], %g4
5437bded2dbSJung-uk Kim	retl
5447bded2dbSJung-uk Kim	ldx		[$key + 200], %g5
5457bded2dbSJung-uk Kim.type	_cmll256_load_deckey,#function
5467bded2dbSJung-uk Kim.size	_cmll256_load_deckey,.-_cmll256_load_deckey
5477bded2dbSJung-uk Kim
5487bded2dbSJung-uk Kim.align	32
5497bded2dbSJung-uk Kim_cmll128_encrypt_1x:
5507bded2dbSJung-uk Kim___
5517bded2dbSJung-uk Kimfor ($i=0; $i<3; $i++) {
5527bded2dbSJung-uk Kim    $code.=<<___;
5537bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+0`, %f2, %f0, %f2
5547bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+2`, %f0, %f2, %f0
5557bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+4`, %f2, %f0, %f2
5567bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+6`, %f0, %f2, %f0
5577bded2dbSJung-uk Kim___
5587bded2dbSJung-uk Kim$code.=<<___ if ($i<2);
5597bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+8`, %f2, %f0, %f2
5607bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+10`, %f0, %f2, %f0
5617bded2dbSJung-uk Kim	camellia_fl	%f`16+16*$i+12`, %f0,      %f0
5627bded2dbSJung-uk Kim	camellia_fli	%f`16+16*$i+14`, %f2,      %f2
5637bded2dbSJung-uk Kim___
5647bded2dbSJung-uk Kim}
5657bded2dbSJung-uk Kim$code.=<<___;
5667bded2dbSJung-uk Kim	camellia_f	%f56, %f2, %f0, %f4
5677bded2dbSJung-uk Kim	camellia_f	%f58, %f0, %f4, %f2
5687bded2dbSJung-uk Kim	fxor		%f60, %f4, %f0
5697bded2dbSJung-uk Kim	retl
5707bded2dbSJung-uk Kim	fxor		%f62, %f2, %f2
5717bded2dbSJung-uk Kim.type	_cmll128_encrypt_1x,#function
5727bded2dbSJung-uk Kim.size	_cmll128_encrypt_1x,.-_cmll128_encrypt_1x
5737bded2dbSJung-uk Kim_cmll128_decrypt_1x=_cmll128_encrypt_1x
5747bded2dbSJung-uk Kim
5757bded2dbSJung-uk Kim.align	32
5767bded2dbSJung-uk Kim_cmll128_encrypt_2x:
5777bded2dbSJung-uk Kim___
5787bded2dbSJung-uk Kimfor ($i=0; $i<3; $i++) {
5797bded2dbSJung-uk Kim    $code.=<<___;
5807bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+0`, %f2, %f0, %f2
5817bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+0`, %f6, %f4, %f6
5827bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+2`, %f0, %f2, %f0
5837bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+2`, %f4, %f6, %f4
5847bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+4`, %f2, %f0, %f2
5857bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+4`, %f6, %f4, %f6
5867bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+6`, %f0, %f2, %f0
5877bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+6`, %f4, %f6, %f4
5887bded2dbSJung-uk Kim___
5897bded2dbSJung-uk Kim$code.=<<___ if ($i<2);
5907bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+8`, %f2, %f0, %f2
5917bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+8`, %f6, %f4, %f6
5927bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+10`, %f0, %f2, %f0
5937bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+10`, %f4, %f6, %f4
5947bded2dbSJung-uk Kim	camellia_fl	%f`16+16*$i+12`, %f0,      %f0
5957bded2dbSJung-uk Kim	camellia_fl	%f`16+16*$i+12`, %f4,      %f4
5967bded2dbSJung-uk Kim	camellia_fli	%f`16+16*$i+14`, %f2,      %f2
5977bded2dbSJung-uk Kim	camellia_fli	%f`16+16*$i+14`, %f6,      %f6
5987bded2dbSJung-uk Kim___
5997bded2dbSJung-uk Kim}
6007bded2dbSJung-uk Kim$code.=<<___;
6017bded2dbSJung-uk Kim	camellia_f	%f56, %f2, %f0, %f8
6027bded2dbSJung-uk Kim	camellia_f	%f56, %f6, %f4, %f10
6037bded2dbSJung-uk Kim	camellia_f	%f58, %f0, %f8, %f2
6047bded2dbSJung-uk Kim	camellia_f	%f58, %f4, %f10, %f6
6057bded2dbSJung-uk Kim	fxor		%f60, %f8, %f0
6067bded2dbSJung-uk Kim	fxor		%f60, %f10, %f4
6077bded2dbSJung-uk Kim	fxor		%f62, %f2, %f2
6087bded2dbSJung-uk Kim	retl
6097bded2dbSJung-uk Kim	fxor		%f62, %f6, %f6
6107bded2dbSJung-uk Kim.type	_cmll128_encrypt_2x,#function
6117bded2dbSJung-uk Kim.size	_cmll128_encrypt_2x,.-_cmll128_encrypt_2x
6127bded2dbSJung-uk Kim_cmll128_decrypt_2x=_cmll128_encrypt_2x
6137bded2dbSJung-uk Kim
6147bded2dbSJung-uk Kim.align	32
6157bded2dbSJung-uk Kim_cmll256_encrypt_1x:
6167bded2dbSJung-uk Kim	camellia_f	%f16, %f2, %f0, %f2
6177bded2dbSJung-uk Kim	camellia_f	%f18, %f0, %f2, %f0
6187bded2dbSJung-uk Kim	ldd		[$key + 208], %f16
6197bded2dbSJung-uk Kim	ldd		[$key + 216], %f18
6207bded2dbSJung-uk Kim	camellia_f	%f20, %f2, %f0, %f2
6217bded2dbSJung-uk Kim	camellia_f	%f22, %f0, %f2, %f0
6227bded2dbSJung-uk Kim	ldd		[$key + 224], %f20
6237bded2dbSJung-uk Kim	ldd		[$key + 232], %f22
6247bded2dbSJung-uk Kim	camellia_f	%f24, %f2, %f0, %f2
6257bded2dbSJung-uk Kim	camellia_f	%f26, %f0, %f2, %f0
6267bded2dbSJung-uk Kim	ldd		[$key + 240], %f24
6277bded2dbSJung-uk Kim	ldd		[$key + 248], %f26
6287bded2dbSJung-uk Kim	camellia_fl	%f28, %f0, %f0
6297bded2dbSJung-uk Kim	camellia_fli	%f30, %f2, %f2
6307bded2dbSJung-uk Kim	ldd		[$key + 256], %f28
6317bded2dbSJung-uk Kim	ldd		[$key + 264], %f30
6327bded2dbSJung-uk Kim___
6337bded2dbSJung-uk Kimfor ($i=1; $i<3; $i++) {
6347bded2dbSJung-uk Kim    $code.=<<___;
6357bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+0`, %f2, %f0, %f2
6367bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+2`, %f0, %f2, %f0
6377bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+4`, %f2, %f0, %f2
6387bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+6`, %f0, %f2, %f0
6397bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+8`, %f2, %f0, %f2
6407bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+10`, %f0, %f2, %f0
6417bded2dbSJung-uk Kim	camellia_fl	%f`16+16*$i+12`, %f0,      %f0
6427bded2dbSJung-uk Kim	camellia_fli	%f`16+16*$i+14`, %f2,      %f2
6437bded2dbSJung-uk Kim___
6447bded2dbSJung-uk Kim}
6457bded2dbSJung-uk Kim$code.=<<___;
6467bded2dbSJung-uk Kim	camellia_f	%f16, %f2, %f0, %f2
6477bded2dbSJung-uk Kim	camellia_f	%f18, %f0, %f2, %f0
6487bded2dbSJung-uk Kim	ldd		[$key + 16], %f16
6497bded2dbSJung-uk Kim	ldd		[$key + 24], %f18
6507bded2dbSJung-uk Kim	camellia_f	%f20, %f2, %f0, %f2
6517bded2dbSJung-uk Kim	camellia_f	%f22, %f0, %f2, %f0
6527bded2dbSJung-uk Kim	ldd		[$key + 32], %f20
6537bded2dbSJung-uk Kim	ldd		[$key + 40], %f22
6547bded2dbSJung-uk Kim	camellia_f	%f24, %f2, %f0, %f4
6557bded2dbSJung-uk Kim	camellia_f	%f26, %f0, %f4, %f2
6567bded2dbSJung-uk Kim	ldd		[$key + 48], %f24
6577bded2dbSJung-uk Kim	ldd		[$key + 56], %f26
6587bded2dbSJung-uk Kim	fxor		%f28, %f4, %f0
6597bded2dbSJung-uk Kim	fxor		%f30, %f2, %f2
6607bded2dbSJung-uk Kim	ldd		[$key + 64], %f28
6617bded2dbSJung-uk Kim	retl
6627bded2dbSJung-uk Kim	ldd		[$key + 72], %f30
6637bded2dbSJung-uk Kim.type	_cmll256_encrypt_1x,#function
6647bded2dbSJung-uk Kim.size	_cmll256_encrypt_1x,.-_cmll256_encrypt_1x
6657bded2dbSJung-uk Kim
6667bded2dbSJung-uk Kim.align	32
6677bded2dbSJung-uk Kim_cmll256_encrypt_2x:
6687bded2dbSJung-uk Kim	camellia_f	%f16, %f2, %f0, %f2
6697bded2dbSJung-uk Kim	camellia_f	%f16, %f6, %f4, %f6
6707bded2dbSJung-uk Kim	camellia_f	%f18, %f0, %f2, %f0
6717bded2dbSJung-uk Kim	camellia_f	%f18, %f4, %f6, %f4
6727bded2dbSJung-uk Kim	ldd		[$key + 208], %f16
6737bded2dbSJung-uk Kim	ldd		[$key + 216], %f18
6747bded2dbSJung-uk Kim	camellia_f	%f20, %f2, %f0, %f2
6757bded2dbSJung-uk Kim	camellia_f	%f20, %f6, %f4, %f6
6767bded2dbSJung-uk Kim	camellia_f	%f22, %f0, %f2, %f0
6777bded2dbSJung-uk Kim	camellia_f	%f22, %f4, %f6, %f4
6787bded2dbSJung-uk Kim	ldd		[$key + 224], %f20
6797bded2dbSJung-uk Kim	ldd		[$key + 232], %f22
6807bded2dbSJung-uk Kim	camellia_f	%f24, %f2, %f0, %f2
6817bded2dbSJung-uk Kim	camellia_f	%f24, %f6, %f4, %f6
6827bded2dbSJung-uk Kim	camellia_f	%f26, %f0, %f2, %f0
6837bded2dbSJung-uk Kim	camellia_f	%f26, %f4, %f6, %f4
6847bded2dbSJung-uk Kim	ldd		[$key + 240], %f24
6857bded2dbSJung-uk Kim	ldd		[$key + 248], %f26
6867bded2dbSJung-uk Kim	camellia_fl	%f28, %f0, %f0
6877bded2dbSJung-uk Kim	camellia_fl	%f28, %f4, %f4
6887bded2dbSJung-uk Kim	camellia_fli	%f30, %f2, %f2
6897bded2dbSJung-uk Kim	camellia_fli	%f30, %f6, %f6
6907bded2dbSJung-uk Kim	ldd		[$key + 256], %f28
6917bded2dbSJung-uk Kim	ldd		[$key + 264], %f30
6927bded2dbSJung-uk Kim___
6937bded2dbSJung-uk Kimfor ($i=1; $i<3; $i++) {
6947bded2dbSJung-uk Kim    $code.=<<___;
6957bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+0`, %f2, %f0, %f2
6967bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+0`, %f6, %f4, %f6
6977bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+2`, %f0, %f2, %f0
6987bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+2`, %f4, %f6, %f4
6997bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+4`, %f2, %f0, %f2
7007bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+4`, %f6, %f4, %f6
7017bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+6`, %f0, %f2, %f0
7027bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+6`, %f4, %f6, %f4
7037bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+8`, %f2, %f0, %f2
7047bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+8`, %f6, %f4, %f6
7057bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+10`, %f0, %f2, %f0
7067bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+10`, %f4, %f6, %f4
7077bded2dbSJung-uk Kim	camellia_fl	%f`16+16*$i+12`, %f0,      %f0
7087bded2dbSJung-uk Kim	camellia_fl	%f`16+16*$i+12`, %f4,      %f4
7097bded2dbSJung-uk Kim	camellia_fli	%f`16+16*$i+14`, %f2,      %f2
7107bded2dbSJung-uk Kim	camellia_fli	%f`16+16*$i+14`, %f6,      %f6
7117bded2dbSJung-uk Kim___
7127bded2dbSJung-uk Kim}
7137bded2dbSJung-uk Kim$code.=<<___;
7147bded2dbSJung-uk Kim	camellia_f	%f16, %f2, %f0, %f2
7157bded2dbSJung-uk Kim	camellia_f	%f16, %f6, %f4, %f6
7167bded2dbSJung-uk Kim	camellia_f	%f18, %f0, %f2, %f0
7177bded2dbSJung-uk Kim	camellia_f	%f18, %f4, %f6, %f4
7187bded2dbSJung-uk Kim	ldd		[$key + 16], %f16
7197bded2dbSJung-uk Kim	ldd		[$key + 24], %f18
7207bded2dbSJung-uk Kim	camellia_f	%f20, %f2, %f0, %f2
7217bded2dbSJung-uk Kim	camellia_f	%f20, %f6, %f4, %f6
7227bded2dbSJung-uk Kim	camellia_f	%f22, %f0, %f2, %f0
7237bded2dbSJung-uk Kim	camellia_f	%f22, %f4, %f6, %f4
7247bded2dbSJung-uk Kim	ldd		[$key + 32], %f20
7257bded2dbSJung-uk Kim	ldd		[$key + 40], %f22
7267bded2dbSJung-uk Kim	camellia_f	%f24, %f2, %f0, %f8
7277bded2dbSJung-uk Kim	camellia_f	%f24, %f6, %f4, %f10
7287bded2dbSJung-uk Kim	camellia_f	%f26, %f0, %f8, %f2
7297bded2dbSJung-uk Kim	camellia_f	%f26, %f4, %f10, %f6
7307bded2dbSJung-uk Kim	ldd		[$key + 48], %f24
7317bded2dbSJung-uk Kim	ldd		[$key + 56], %f26
7327bded2dbSJung-uk Kim	fxor		%f28, %f8, %f0
7337bded2dbSJung-uk Kim	fxor		%f28, %f10, %f4
7347bded2dbSJung-uk Kim	fxor		%f30, %f2, %f2
7357bded2dbSJung-uk Kim	fxor		%f30, %f6, %f6
7367bded2dbSJung-uk Kim	ldd		[$key + 64], %f28
7377bded2dbSJung-uk Kim	retl
7387bded2dbSJung-uk Kim	ldd		[$key + 72], %f30
7397bded2dbSJung-uk Kim.type	_cmll256_encrypt_2x,#function
7407bded2dbSJung-uk Kim.size	_cmll256_encrypt_2x,.-_cmll256_encrypt_2x
7417bded2dbSJung-uk Kim
7427bded2dbSJung-uk Kim.align	32
7437bded2dbSJung-uk Kim_cmll256_decrypt_1x:
7447bded2dbSJung-uk Kim	camellia_f	%f16, %f2, %f0, %f2
7457bded2dbSJung-uk Kim	camellia_f	%f18, %f0, %f2, %f0
7467bded2dbSJung-uk Kim	ldd		[$key - 8], %f16
7477bded2dbSJung-uk Kim	ldd		[$key - 16], %f18
7487bded2dbSJung-uk Kim	camellia_f	%f20, %f2, %f0, %f2
7497bded2dbSJung-uk Kim	camellia_f	%f22, %f0, %f2, %f0
7507bded2dbSJung-uk Kim	ldd		[$key - 24], %f20
7517bded2dbSJung-uk Kim	ldd		[$key - 32], %f22
7527bded2dbSJung-uk Kim	camellia_f	%f24, %f2, %f0, %f2
7537bded2dbSJung-uk Kim	camellia_f	%f26, %f0, %f2, %f0
7547bded2dbSJung-uk Kim	ldd		[$key - 40], %f24
7557bded2dbSJung-uk Kim	ldd		[$key - 48], %f26
7567bded2dbSJung-uk Kim	camellia_fl	%f28, %f0, %f0
7577bded2dbSJung-uk Kim	camellia_fli	%f30, %f2, %f2
7587bded2dbSJung-uk Kim	ldd		[$key - 56], %f28
7597bded2dbSJung-uk Kim	ldd		[$key - 64], %f30
7607bded2dbSJung-uk Kim___
7617bded2dbSJung-uk Kimfor ($i=1; $i<3; $i++) {
7627bded2dbSJung-uk Kim    $code.=<<___;
7637bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+0`, %f2, %f0, %f2
7647bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+2`, %f0, %f2, %f0
7657bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+4`, %f2, %f0, %f2
7667bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+6`, %f0, %f2, %f0
7677bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+8`, %f2, %f0, %f2
7687bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+10`, %f0, %f2, %f0
7697bded2dbSJung-uk Kim	camellia_fl	%f`16+16*$i+12`, %f0,      %f0
7707bded2dbSJung-uk Kim	camellia_fli	%f`16+16*$i+14`, %f2,      %f2
7717bded2dbSJung-uk Kim___
7727bded2dbSJung-uk Kim}
7737bded2dbSJung-uk Kim$code.=<<___;
7747bded2dbSJung-uk Kim	camellia_f	%f16, %f2, %f0, %f2
7757bded2dbSJung-uk Kim	camellia_f	%f18, %f0, %f2, %f0
7767bded2dbSJung-uk Kim	ldd		[$key + 184], %f16
7777bded2dbSJung-uk Kim	ldd		[$key + 176], %f18
7787bded2dbSJung-uk Kim	camellia_f	%f20, %f2, %f0, %f2
7797bded2dbSJung-uk Kim	camellia_f	%f22, %f0, %f2, %f0
7807bded2dbSJung-uk Kim	ldd		[$key + 168], %f20
7817bded2dbSJung-uk Kim	ldd		[$key + 160], %f22
7827bded2dbSJung-uk Kim	camellia_f	%f24, %f2, %f0, %f4
7837bded2dbSJung-uk Kim	camellia_f	%f26, %f0, %f4, %f2
7847bded2dbSJung-uk Kim	ldd		[$key + 152], %f24
7857bded2dbSJung-uk Kim	ldd		[$key + 144], %f26
7867bded2dbSJung-uk Kim	fxor		%f30, %f4, %f0
7877bded2dbSJung-uk Kim	fxor		%f28, %f2, %f2
7887bded2dbSJung-uk Kim	ldd		[$key + 136], %f28
7897bded2dbSJung-uk Kim	retl
7907bded2dbSJung-uk Kim	ldd		[$key + 128], %f30
7917bded2dbSJung-uk Kim.type	_cmll256_decrypt_1x,#function
7927bded2dbSJung-uk Kim.size	_cmll256_decrypt_1x,.-_cmll256_decrypt_1x
7937bded2dbSJung-uk Kim
7947bded2dbSJung-uk Kim.align	32
7957bded2dbSJung-uk Kim_cmll256_decrypt_2x:
7967bded2dbSJung-uk Kim	camellia_f	%f16, %f2, %f0, %f2
7977bded2dbSJung-uk Kim	camellia_f	%f16, %f6, %f4, %f6
7987bded2dbSJung-uk Kim	camellia_f	%f18, %f0, %f2, %f0
7997bded2dbSJung-uk Kim	camellia_f	%f18, %f4, %f6, %f4
8007bded2dbSJung-uk Kim	ldd		[$key - 8], %f16
8017bded2dbSJung-uk Kim	ldd		[$key - 16], %f18
8027bded2dbSJung-uk Kim	camellia_f	%f20, %f2, %f0, %f2
8037bded2dbSJung-uk Kim	camellia_f	%f20, %f6, %f4, %f6
8047bded2dbSJung-uk Kim	camellia_f	%f22, %f0, %f2, %f0
8057bded2dbSJung-uk Kim	camellia_f	%f22, %f4, %f6, %f4
8067bded2dbSJung-uk Kim	ldd		[$key - 24], %f20
8077bded2dbSJung-uk Kim	ldd		[$key - 32], %f22
8087bded2dbSJung-uk Kim	camellia_f	%f24, %f2, %f0, %f2
8097bded2dbSJung-uk Kim	camellia_f	%f24, %f6, %f4, %f6
8107bded2dbSJung-uk Kim	camellia_f	%f26, %f0, %f2, %f0
8117bded2dbSJung-uk Kim	camellia_f	%f26, %f4, %f6, %f4
8127bded2dbSJung-uk Kim	ldd		[$key - 40], %f24
8137bded2dbSJung-uk Kim	ldd		[$key - 48], %f26
8147bded2dbSJung-uk Kim	camellia_fl	%f28, %f0, %f0
8157bded2dbSJung-uk Kim	camellia_fl	%f28, %f4, %f4
8167bded2dbSJung-uk Kim	camellia_fli	%f30, %f2, %f2
8177bded2dbSJung-uk Kim	camellia_fli	%f30, %f6, %f6
8187bded2dbSJung-uk Kim	ldd		[$key - 56], %f28
8197bded2dbSJung-uk Kim	ldd		[$key - 64], %f30
8207bded2dbSJung-uk Kim___
8217bded2dbSJung-uk Kimfor ($i=1; $i<3; $i++) {
8227bded2dbSJung-uk Kim    $code.=<<___;
8237bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+0`, %f2, %f0, %f2
8247bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+0`, %f6, %f4, %f6
8257bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+2`, %f0, %f2, %f0
8267bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+2`, %f4, %f6, %f4
8277bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+4`, %f2, %f0, %f2
8287bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+4`, %f6, %f4, %f6
8297bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+6`, %f0, %f2, %f0
8307bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+6`, %f4, %f6, %f4
8317bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+8`, %f2, %f0, %f2
8327bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+8`, %f6, %f4, %f6
8337bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+10`, %f0, %f2, %f0
8347bded2dbSJung-uk Kim	camellia_f	%f`16+16*$i+10`, %f4, %f6, %f4
8357bded2dbSJung-uk Kim	camellia_fl	%f`16+16*$i+12`, %f0,      %f0
8367bded2dbSJung-uk Kim	camellia_fl	%f`16+16*$i+12`, %f4,      %f4
8377bded2dbSJung-uk Kim	camellia_fli	%f`16+16*$i+14`, %f2,      %f2
8387bded2dbSJung-uk Kim	camellia_fli	%f`16+16*$i+14`, %f6,      %f6
8397bded2dbSJung-uk Kim___
8407bded2dbSJung-uk Kim}
8417bded2dbSJung-uk Kim$code.=<<___;
8427bded2dbSJung-uk Kim	camellia_f	%f16, %f2, %f0, %f2
8437bded2dbSJung-uk Kim	camellia_f	%f16, %f6, %f4, %f6
8447bded2dbSJung-uk Kim	camellia_f	%f18, %f0, %f2, %f0
8457bded2dbSJung-uk Kim	camellia_f	%f18, %f4, %f6, %f4
8467bded2dbSJung-uk Kim	ldd		[$key + 184], %f16
8477bded2dbSJung-uk Kim	ldd		[$key + 176], %f18
8487bded2dbSJung-uk Kim	camellia_f	%f20, %f2, %f0, %f2
8497bded2dbSJung-uk Kim	camellia_f	%f20, %f6, %f4, %f6
8507bded2dbSJung-uk Kim	camellia_f	%f22, %f0, %f2, %f0
8517bded2dbSJung-uk Kim	camellia_f	%f22, %f4, %f6, %f4
8527bded2dbSJung-uk Kim	ldd		[$key + 168], %f20
8537bded2dbSJung-uk Kim	ldd		[$key + 160], %f22
8547bded2dbSJung-uk Kim	camellia_f	%f24, %f2, %f0, %f8
8557bded2dbSJung-uk Kim	camellia_f	%f24, %f6, %f4, %f10
8567bded2dbSJung-uk Kim	camellia_f	%f26, %f0, %f8, %f2
8577bded2dbSJung-uk Kim	camellia_f	%f26, %f4, %f10, %f6
8587bded2dbSJung-uk Kim	ldd		[$key + 152], %f24
8597bded2dbSJung-uk Kim	ldd		[$key + 144], %f26
8607bded2dbSJung-uk Kim	fxor		%f30, %f8, %f0
8617bded2dbSJung-uk Kim	fxor		%f30, %f10, %f4
8627bded2dbSJung-uk Kim	fxor		%f28, %f2, %f2
8637bded2dbSJung-uk Kim	fxor		%f28, %f6, %f6
8647bded2dbSJung-uk Kim	ldd		[$key + 136], %f28
8657bded2dbSJung-uk Kim	retl
8667bded2dbSJung-uk Kim	ldd		[$key + 128], %f30
8677bded2dbSJung-uk Kim.type	_cmll256_decrypt_2x,#function
8687bded2dbSJung-uk Kim.size	_cmll256_decrypt_2x,.-_cmll256_decrypt_2x
8697bded2dbSJung-uk Kim___
8707bded2dbSJung-uk Kim
8717bded2dbSJung-uk Kim&alg_cbc_encrypt_implement("cmll",128);
8727bded2dbSJung-uk Kim&alg_cbc_encrypt_implement("cmll",256);
8737bded2dbSJung-uk Kim
8747bded2dbSJung-uk Kim&alg_cbc_decrypt_implement("cmll",128);
8757bded2dbSJung-uk Kim&alg_cbc_decrypt_implement("cmll",256);
8767bded2dbSJung-uk Kim
8777bded2dbSJung-uk Kimif ($::evp) {
8787bded2dbSJung-uk Kim    &alg_ctr32_implement("cmll",128);
8797bded2dbSJung-uk Kim    &alg_ctr32_implement("cmll",256);
8807bded2dbSJung-uk Kim}
8817bded2dbSJung-uk Kim}}}
8827bded2dbSJung-uk Kim
8837bded2dbSJung-uk Kimif (!$::evp) {
8847bded2dbSJung-uk Kim$code.=<<___;
8857bded2dbSJung-uk Kim.global	Camellia_encrypt
8867bded2dbSJung-uk KimCamellia_encrypt=cmll_t4_encrypt
8877bded2dbSJung-uk Kim.global	Camellia_decrypt
8887bded2dbSJung-uk KimCamellia_decrypt=cmll_t4_decrypt
8897bded2dbSJung-uk Kim.global	Camellia_set_key
8907bded2dbSJung-uk Kim.align	32
8917bded2dbSJung-uk KimCamellia_set_key:
8927bded2dbSJung-uk Kim	andcc		%o2, 7, %g0		! double-check alignment
8937bded2dbSJung-uk Kim	bnz,a,pn	%icc, 1f
8947bded2dbSJung-uk Kim	mov		-1, %o0
8957bded2dbSJung-uk Kim	brz,a,pn	%o0, 1f
8967bded2dbSJung-uk Kim	mov		-1, %o0
8977bded2dbSJung-uk Kim	brz,a,pn	%o2, 1f
8987bded2dbSJung-uk Kim	mov		-1, %o0
8997bded2dbSJung-uk Kim	andncc		%o1, 0x1c0, %g0
9007bded2dbSJung-uk Kim	bnz,a,pn	%icc, 1f
9017bded2dbSJung-uk Kim	mov		-2, %o0
9027bded2dbSJung-uk Kim	cmp		%o1, 128
9037bded2dbSJung-uk Kim	bl,a,pn		%icc, 1f
9047bded2dbSJung-uk Kim	mov		-2, %o0
9057bded2dbSJung-uk Kim	b		cmll_t4_set_key
9067bded2dbSJung-uk Kim	nop
9077bded2dbSJung-uk Kim1:	retl
9087bded2dbSJung-uk Kim	nop
9097bded2dbSJung-uk Kim.type	Camellia_set_key,#function
9107bded2dbSJung-uk Kim.size	Camellia_set_key,.-Camellia_set_key
9117bded2dbSJung-uk Kim___
9127bded2dbSJung-uk Kim
9137bded2dbSJung-uk Kimmy ($inp,$out,$len,$key,$ivec,$enc)=map("%o$_",(0..5));
9147bded2dbSJung-uk Kim
9157bded2dbSJung-uk Kim$code.=<<___;
9167bded2dbSJung-uk Kim.globl	Camellia_cbc_encrypt
9177bded2dbSJung-uk Kim.align	32
9187bded2dbSJung-uk KimCamellia_cbc_encrypt:
9197bded2dbSJung-uk Kim	ld		[$key + 272], %g1
9207bded2dbSJung-uk Kim	nop
9217bded2dbSJung-uk Kim	brz		$enc, .Lcbc_decrypt
9227bded2dbSJung-uk Kim	cmp		%g1, 3
9237bded2dbSJung-uk Kim
9247bded2dbSJung-uk Kim	be,pt		%icc, cmll128_t4_cbc_encrypt
9257bded2dbSJung-uk Kim	nop
9267bded2dbSJung-uk Kim	ba		cmll256_t4_cbc_encrypt
9277bded2dbSJung-uk Kim	nop
9287bded2dbSJung-uk Kim
9297bded2dbSJung-uk Kim.Lcbc_decrypt:
9307bded2dbSJung-uk Kim	be,pt		%icc, cmll128_t4_cbc_decrypt
9317bded2dbSJung-uk Kim	nop
9327bded2dbSJung-uk Kim	ba		cmll256_t4_cbc_decrypt
9337bded2dbSJung-uk Kim	nop
9347bded2dbSJung-uk Kim.type	Camellia_cbc_encrypt,#function
9357bded2dbSJung-uk Kim.size	Camellia_cbc_encrypt,.-Camellia_cbc_encrypt
9367bded2dbSJung-uk Kim___
9377bded2dbSJung-uk Kim}
9387bded2dbSJung-uk Kim
9397bded2dbSJung-uk Kim&emit_assembler();
9407bded2dbSJung-uk Kim
94117f01e99SJung-uk Kimclose STDOUT or die "error closing STDOUT: $!";
942