/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* * Unified version for both position independent and non position independent * for both v8plus and v9 * compile with: * * cc -c -xarch=v8plus des_crypt_asm.s or * cc -c -arch=v9 des_crypt_asm.s * for kernel use (no -KPIC) * * and with * * cc -c -xarch=v8plus -KPIC -DPIC des_crypt_asm.s or * cc -c -arch=v9 -KPIC -DPIC des_crypt_asm.s * for .so use * * The tables were generated by a C program, compiled into the C version * of this function, from which a .s was generated by the C compiler and * that .s was used as a starting point for this one, in particular for * the data definitions. It is important, though that the tables and * the code both remain in the text section and in this order, otherwise, * at least on UltraSparc-II processors, collisions in the E-cache are * highly probable between the code and the data it is using which can * result in up to 40% performance loss * * For a description of the DES algithm, see NIST publication FIPS PUB 46-3 * * In this implementation, the 16 rounds of DES are carried out by unrolling * a loop that computes two rounds. For those 2 rounds, the two parts of * the intermediate variable (L and R in the FIPS pub) are kept in their * extended forms (i.e. in the one after applying the transformation E), * with the appropriate bits repeated so that bits needed for the S-box * lookups are in consecutive positions. So the bits of the L (or R) * variable appear in the following order (X represents a bit that is not * from L (R), these bits are always 0): * 32 1 2 3 4 5 X X X X X X X X 4 5 * 6 7 8 9 8 9 10 11 12 13 12 13 14 15 16 17 * 16 17 18 19 20 21 X X X X X 20 21 22 23 24 * 25 24 25 26 27 28 29 28 29 30 31 32 1 X X X * This arrangement makes it possible that 3 of the 8 S-box indices * can be extracted by a single instruction: srlx by 55 for the S1 index, * srl by 23 for the S5 index and and by 0x1f80 for the S8 index. The rest * of the indices requires two operations, a shift and an and. * The tables for the S-boxes are computed in such a way that when or-ed * together, they give the result of the S-box, P and E computations. * Also, the key schedule bits are computed to follow this bit-scheme. * The initial permutation tables are also computed to produce this * bit distribution and the final permutation works from these, too. * * The end of each round is overlapped with the beginning of the next * one since after the first 6 S-box lookups all the bits necessary * for one S-box lookup in the next round can be computed (by xor-ing * the next key schedule item to the partially computed next R). */ #if defined(lint) || defined(__lint) /* LINTED */ /* Nothing to be linted in this file, its pure assembly source */ #else /* lint || __lint */ .register %g2,#scratch .register %g3,#scratch .file "encrypt_asm.S" .section ".text",#alloc .align 32 ! ! CONSTANT POOL ! des_sbox_table: .word 5121 .word 1073872896 .word 0 .word 0 .word 1 .word 1073741824 .word 5121 .word 1073872928 .word 5121 .word 1073741856 .word 1 .word 1073872928 .word 0 .word 32 .word 1 .word 1073741824 .word 0 .word 131072 .word 5121 .word 1073872896 .word 5121 .word 1073872928 .word 0 .word 131072 .word 5120 .word 131104 .word 5121 .word 1073741856 .word 5120 .word 0 .word 0 .word 32 .word 0 .word 131104 .word 5120 .word 131072 .word 5120 .word 131072 .word 1 .word 1073872896 .word 1 .word 1073872896 .word 5121 .word 1073741824 .word 5121 .word 1073741824 .word 5120 .word 131104 .word 1 .word 1073741856 .word 5120 .word 32 .word 5120 .word 32 .word 1 .word 1073741856 .word 0 .word 0 .word 0 .word 131104 .word 1 .word 1073872928 .word 5120 .word 0 .word 1 .word 1073741824 .word 5121 .word 1073872928 .word 0 .word 32 .word 5121 .word 1073741824 .word 5121 .word 1073872896 .word 5120 .word 0 .word 5120 .word 0 .word 0 .word 131072 .word 5121 .word 1073741856 .word 1 .word 1073741824 .word 1 .word 1073872896 .word 5120 .word 32 .word 0 .word 131072 .word 0 .word 32 .word 5120 .word 131104 .word 1 .word 1073872928 .word 5121 .word 1073872928 .word 1 .word 1073741856 .word 5121 .word 1073741824 .word 5120 .word 131104 .word 5120 .word 32 .word 0 .word 131104 .word 1 .word 1073872928 .word 5121 .word 1073872896 .word 0 .word 131104 .word 5120 .word 131072 .word 5120 .word 131072 .word 0 .word 0 .word 1 .word 1073741856 .word 1 .word 1073872896 .word 0 .word 0 .word 5121 .word 1073741856 .word 536870992 .word 536872192 .word 536870912 .word 536870912 .word 0 .word 536870912 .word 80 .word 536872192 .word 80 .word 0 .word 0 .word 1280 .word 536870992 .word 1280 .word 536870912 .word 536872192 .word 536870912 .word 1280 .word 536870992 .word 536872192 .word 536870992 .word 536870912 .word 536870912 .word 0 .word 536870912 .word 536870912 .word 80 .word 0 .word 0 .word 1280 .word 536870992 .word 1280 .word 80 .word 536870912 .word 80 .word 1280 .word 536870912 .word 536872192 .word 0 .word 0 .word 536870912 .word 0 .word 0 .word 536870912 .word 80 .word 536872192 .word 536870992 .word 0 .word 80 .word 1280 .word 536870912 .word 1280 .word 0 .word 0 .word 80 .word 536870912 .word 0 .word 536872192 .word 536870992 .word 536870912 .word 536870992 .word 0 .word 0 .word 536872192 .word 0 .word 0 .word 80 .word 536872192 .word 536870992 .word 1280 .word 80 .word 0 .word 536870912 .word 536872192 .word 536870992 .word 0 .word 536870992 .word 536870912 .word 0 .word 536870912 .word 536870992 .word 0 .word 536870912 .word 536870912 .word 0 .word 1280 .word 536870992 .word 536872192 .word 80 .word 536872192 .word 0 .word 1280 .word 0 .word 536870912 .word 536870912 .word 0 .word 0 .word 536872192 .word 536870992 .word 536870912 .word 80 .word 0 .word 536870912 .word 1280 .word 80 .word 1280 .word 536870912 .word 536872192 .word 536870912 .word 1280 .word 80 .word 1280 .word 80 .word 536870912 .word 0 .word 0 .word 536870912 .word 536870912 .word 0 .word 536872192 .word 536870912 .word 0 .word 536870992 .word 1280 .word 536870992 .word 536872192 .word 80 .word 536870912 .word 0 .word 81984 .word 32770 .word -2147401728 .word 0 .word 0 .word 32770 .word -2147483584 .word 32768 .word 81920 .word 0 .word 0 .word 2 .word -2147401664 .word 32768 .word 81920 .word 2 .word -2147483584 .word 32768 .word 64 .word 32768 .word 64 .word 2 .word -2147483648 .word 32770 .word -2147401664 .word 2 .word -2147483584 .word 32770 .word -2147483648 .word 0 .word 81984 .word 32768 .word 0 .word 0 .word 64 .word 32770 .word -2147401728 .word 0 .word 81920 .word 2 .word -2147401728 .word 32770 .word -2147483648 .word 32770 .word -2147483584 .word 2 .word -2147401664 .word 32768 .word 81984 .word 2 .word -2147401728 .word 2 .word -2147483648 .word 32768 .word 81984 .word 0 .word 64 .word 32770 .word -2147401664 .word 0 .word 81920 .word 32768 .word 0 .word 32770 .word -2147401728 .word 32768 .word 0 .word 2 .word -2147483584 .word 0 .word 81984 .word 2 .word -2147483648 .word 32770 .word -2147401728 .word 32768 .word 81920 .word 0 .word 0 .word 0 .word 81920 .word 2 .word -2147483584 .word 32770 .word -2147401664 .word 32768 .word 81920 .word 32768 .word 64 .word 0 .word 81920 .word 0 .word 0 .word 32770 .word -2147483584 .word 32768 .word 81984 .word 2 .word -2147483648 .word 32768 .word 0 .word 32770 .word -2147401664 .word 0 .word 64 .word 2 .word -2147401664 .word 2 .word -2147401728 .word 32768 .word 64 .word 32770 .word -2147483648 .word 32768 .word 81984 .word 0 .word 81984 .word 32770 .word -2147483648 .word 2 .word -2147401664 .word 0 .word 64 .word 32770 .word -2147483584 .word 2 .word -2147401728 .word 1073742336 .word 135266312 .word 1073741824 .word 135270408 .word 1073741824 .word 135270408 .word 0 .word 4096 .word 512 .word 135270400 .word 1073742336 .word 4104 .word 1073742336 .word 8 .word 1073741824 .word 135266312 .word 0 .word 0 .word 512 .word 135266304 .word 512 .word 135266304 .word 1073742336 .word 135270408 .word 1073741824 .word 4104 .word 0 .word 0 .word 512 .word 4096 .word 1073742336 .word 8 .word 1073741824 .word 8 .word 0 .word 135266304 .word 512 .word 0 .word 1073742336 .word 135266312 .word 0 .word 4096 .word 512 .word 0 .word 1073741824 .word 135266312 .word 0 .word 135270400 .word 1073742336 .word 4104 .word 1073741824 .word 8 .word 0 .word 135270400 .word 512 .word 4096 .word 0 .word 135266304 .word 512 .word 135270400 .word 1073742336 .word 135270408 .word 1073741824 .word 4104 .word 512 .word 4096 .word 1073742336 .word 8 .word 512 .word 135266304 .word 1073742336 .word 135270408 .word 1073741824 .word 4104 .word 0 .word 0 .word 0 .word 0 .word 512 .word 135266304 .word 0 .word 135270400 .word 512 .word 4096 .word 1073742336 .word 4104 .word 1073741824 .word 8 .word 1073742336 .word 135266312 .word 1073741824 .word 135270408 .word 1073741824 .word 135270408 .word 0 .word 4096 .word 1073742336 .word 135270408 .word 1073741824 .word 4104 .word 1073741824 .word 8 .word 0 .word 135266304 .word 1073742336 .word 8 .word 1073741824 .word 135266312 .word 512 .word 135270400 .word 1073742336 .word 4104 .word 1073741824 .word 135266312 .word 0 .word 135270400 .word 512 .word 0 .word 1073742336 .word 135266312 .word 0 .word 4096 .word 512 .word 0 .word 0 .word 135266304 .word 512 .word 135270400 .word 0 .word 40960 .word 10248 .word 40960 .word 10248 .word 0 .word 268445696 .word 40960 .word 8 .word 0 .word 0 .word 40960 .word 268435456 .word 0 .word 10248 .word 0 .word 268435464 .word 40960 .word 8 .word 0 .word 10240 .word 40960 .word 268435464 .word 40960 .word 268445696 .word 40960 .word 268445704 .word 0 .word 8 .word 40960 .word 268435456 .word 0 .word 10240 .word 0 .word 268435464 .word 0 .word 268435464 .word 0 .word 0 .word 0 .word 268435456 .word 40960 .word 268445704 .word 40960 .word 268445704 .word 40960 .word 10240 .word 40960 .word 268445704 .word 0 .word 268435456 .word 40960 .word 0 .word 0 .word 268445696 .word 0 .word 10248 .word 40960 .word 10240 .word 0 .word 268445696 .word 0 .word 8 .word 40960 .word 8 .word 0 .word 268445696 .word 40960 .word 0 .word 40960 .word 10240 .word 0 .word 268435456 .word 0 .word 10248 .word 0 .word 268445696 .word 40960 .word 268435464 .word 40960 .word 10240 .word 40960 .word 268435456 .word 0 .word 268445704 .word 0 .word 10248 .word 40960 .word 268435464 .word 40960 .word 0 .word 40960 .word 10240 .word 0 .word 268445704 .word 0 .word 268445704 .word 40960 .word 8 .word 40960 .word 268445696 .word 0 .word 268445704 .word 40960 .word 10248 .word 0 .word 0 .word 0 .word 268435464 .word 0 .word 268445696 .word 0 .word 8 .word 40960 .word 10240 .word 40960 .word 268435456 .word 40960 .word 8 .word 0 .word 0 .word 0 .word 268435464 .word 0 .word 10248 .word 40960 .word 268435456 .word 40960 .word 134348800 .word 640 .word 134349056 .word 0 .word 0 .word 268435456 .word 134349056 .word 268436096 .word 134349056 .word 0 .word 0 .word 640 .word 134349056 .word 268436096 .word 256 .word 0 .word 134348800 .word 268435456 .word 256 .word 268436096 .word 256 .word 0 .word 134348800 .word 640 .word 256 .word 640 .word 134348800 .word 268435456 .word 134348800 .word 0 .word 0 .word 268436096 .word 0 .word 0 .word 256 .word 640 .word 134348800 .word 268436096 .word 0 .word 268435456 .word 256 .word 268435456 .word 134348800 .word 268436096 .word 0 .word 640 .word 134349056 .word 640 .word 134349056 .word 640 .word 0 .word 0 .word 256 .word 268436096 .word 134349056 .word 268435456 .word 0 .word 268436096 .word 256 .word 268435456 .word 134349056 .word 268435456 .word 134348800 .word 0 .word 134348800 .word 268435456 .word 0 .word 640 .word 134349056 .word 640 .word 256 .word 268435456 .word 134349056 .word 268436096 .word 256 .word 0 .word 0 .word 268436096 .word 134348800 .word 640 .word 256 .word 0 .word 134348800 .word 268435456 .word 134348800 .word 0 .word 0 .word 268436096 .word 134348800 .word 640 .word 134349056 .word 268436096 .word 256 .word 268435456 .word 134349056 .word 0 .word 256 .word 268436096 .word 134349056 .word 268435456 .word 0 .word 0 .word 134349056 .word 640 .word 0 .word 640 .word 0 .word 268435456 .word 134349056 .word 0 .word 256 .word 268436096 .word 0 .word 268435456 .word 256 .word 640 .word 134348800 .word 268436096 .word 0 .word 0 .word 134349056 .word 268435456 .word 134348800 .word 0 .word 256 .word 640 .word 134348800 .word 268436096 .word 160 .word 0 .word -2147467104 .word 16 .word -2147467264 .word 262160 .word 0 .word 0 .word 0 .word 262144 .word -2147467264 .word 262160 .word -2147483488 .word 262160 .word 16544 .word 262144 .word -2147467104 .word 262160 .word 160 .word 0 .word 0 .word 0 .word -2147467264 .word 16 .word -2147483648 .word 16 .word 16384 .word 0 .word -2147467104 .word 16 .word -2147483648 .word 262160 .word 16384 .word 262144 .word -2147483488 .word 262160 .word -2147483488 .word 16 .word 16384 .word 262144 .word -2147467264 .word 16 .word 16544 .word 0 .word 16544 .word 262144 .word -2147483488 .word 16 .word 16544 .word 0 .word 0 .word 262144 .word -2147483648 .word 262160 .word -2147467104 .word 262160 .word 160 .word 262144 .word -2147483648 .word 16 .word 16384 .word 0 .word 160 .word 262144 .word 16384 .word 0 .word 160 .word 262144 .word 160 .word 0 .word -2147467264 .word 262160 .word -2147467264 .word 262160 .word -2147467104 .word 16 .word -2147467104 .word 16 .word -2147483648 .word 16 .word -2147483488 .word 16 .word 16384 .word 0 .word 16384 .word 262144 .word 160 .word 0 .word 16544 .word 262144 .word -2147483648 .word 262160 .word -2147483488 .word 262160 .word 16544 .word 262144 .word -2147483648 .word 262160 .word -2147467264 .word 16 .word -2147467104 .word 262160 .word 16544 .word 0 .word 160 .word 262144 .word 0 .word 0 .word -2147483648 .word 16 .word -2147467104 .word 262160 .word 0 .word 0 .word -2147483488 .word 262160 .word 16544 .word 0 .word 0 .word 262144 .word -2147467264 .word 16 .word 16384 .word 262144 .word 0 .word 262144 .word -2147483488 .word 16 .word 67174400 .word 67635200 .word 0 .word 67633152 .word 4 .word 0 .word 67174404 .word 67635200 .word 67174400 .word 0 .word 67174400 .word 67635200 .word 0 .word 2048 .word 67174400 .word 0 .word 4 .word 2048 .word 67174404 .word 0 .word 67174404 .word 67635200 .word 4 .word 67633152 .word 67174404 .word 67633152 .word 4 .word 67635200 .word 0 .word 67633152 .word 0 .word 2048 .word 67174404 .word 0 .word 67174400 .word 2048 .word 67174400 .word 67633152 .word 0 .word 67635200 .word 4 .word 67633152 .word 4 .word 2048 .word 67174404 .word 2048 .word 67174404 .word 67633152 .word 0 .word 67635200 .word 0 .word 0 .word 0 .word 0 .word 67174404 .word 2048 .word 67174400 .word 2048 .word 67174400 .word 67633152 .word 4 .word 67635200 .word 4 .word 0 .word 4 .word 67635200 .word 4 .word 0 .word 67174404 .word 67633152 .word 0 .word 67633152 .word 0 .word 2048 .word 67174404 .word 2048 .word 0 .word 67633152 .word 4 .word 67635200 .word 67174400 .word 67633152 .word 0 .word 2048 .word 67174400 .word 2048 .word 67174404 .word 0 .word 67174404 .word 2048 .word 67174400 .word 0 .word 4 .word 0 .word 67174400 .word 67635200 .word 0 .word 0 .word 67174404 .word 67635200 .word 4 .word 2048 .word 67174400 .word 2048 .word 67174404 .word 0 .word 67174400 .word 67633152 .word 67174400 .word 67635200 .word 0 .word 0 .word 67174404 .word 67635200 .word 4 .word 67633152 .word 4 .word 67633152 .word 0 .word 67635200 .word 0 .word 67635200 .word 4 .word 2048 .word 67174400 .word 0 .word 67174404 .word 67633152 .type des_sbox_table,#object .size des_sbox_table,4096 .align 32 ! ! CONSTANT POOL ! .section ".text",#alloc,#execinstr des_ip_table: .word 0 .word 0 .word 0 .word 1024 .word 8388608 .word 640 .word 8388608 .word 1664 .word 0 .word 4194304 .word 0 .word 4195328 .word 8388608 .word 4194944 .word 8388608 .word 4195968 .word 0 .word 2621440 .word 0 .word 2622464 .word 8388608 .word 2622080 .word 8388608 .word 2623104 .word 0 .word 6815744 .word 0 .word 6816768 .word 8388608 .word 6816384 .word 8388608 .word 6817408 .word 4 .word 0 .word 4 .word 1024 .word 8388612 .word 640 .word 8388612 .word 1664 .word 4 .word 4194304 .word 4 .word 4195328 .word 8388612 .word 4194944 .word 8388612 .word 4195968 .word 4 .word 2621440 .word 4 .word 2622464 .word 8388612 .word 2622080 .word 8388612 .word 2623104 .word 4 .word 6815744 .word 4 .word 6816768 .word 8388612 .word 6816384 .word 8388612 .word 6817408 .word 2 .word -2147483648 .word 2 .word -2147482624 .word 8388610 .word -2147483008 .word 8388610 .word -2147481984 .word 2 .word -2143289344 .word 2 .word -2143288320 .word 8388610 .word -2143288704 .word 8388610 .word -2143287680 .word 2 .word -2144862208 .word 2 .word -2144861184 .word 8388610 .word -2144861568 .word 8388610 .word -2144860544 .word 2 .word -2140667904 .word 2 .word -2140666880 .word 8388610 .word -2140667264 .word 8388610 .word -2140666240 .word 6 .word -2147483648 .word 6 .word -2147482624 .word 8388614 .word -2147483008 .word 8388614 .word -2147481984 .word 6 .word -2143289344 .word 6 .word -2143288320 .word 8388614 .word -2143288704 .word 8388614 .word -2143287680 .word 6 .word -2144862208 .word 6 .word -2144861184 .word 8388614 .word -2144861568 .word 8388614 .word -2144860544 .word 6 .word -2140667904 .word 6 .word -2140666880 .word 8388614 .word -2140667264 .word 8388614 .word -2140666240 .word 16384 .word 0 .word 16384 .word 1024 .word 8404992 .word 640 .word 8404992 .word 1664 .word 16384 .word 4194304 .word 16384 .word 4195328 .word 8404992 .word 4194944 .word 8404992 .word 4195968 .word 16384 .word 2621440 .word 16384 .word 2622464 .word 8404992 .word 2622080 .word 8404992 .word 2623104 .word 16384 .word 6815744 .word 16384 .word 6816768 .word 8404992 .word 6816384 .word 8404992 .word 6817408 .word 16388 .word 0 .word 16388 .word 1024 .word 8404996 .word 640 .word 8404996 .word 1664 .word 16388 .word 4194304 .word 16388 .word 4195328 .word 8404996 .word 4194944 .word 8404996 .word 4195968 .word 16388 .word 2621440 .word 16388 .word 2622464 .word 8404996 .word 2622080 .word 8404996 .word 2623104 .word 16388 .word 6815744 .word 16388 .word 6816768 .word 8404996 .word 6816384 .word 8404996 .word 6817408 .word 16386 .word -2147483648 .word 16386 .word -2147482624 .word 8404994 .word -2147483008 .word 8404994 .word -2147481984 .word 16386 .word -2143289344 .word 16386 .word -2143288320 .word 8404994 .word -2143288704 .word 8404994 .word -2143287680 .word 16386 .word -2144862208 .word 16386 .word -2144861184 .word 8404994 .word -2144861568 .word 8404994 .word -2144860544 .word 16386 .word -2140667904 .word 16386 .word -2140666880 .word 8404994 .word -2140667264 .word 8404994 .word -2140666240 .word 16390 .word -2147483648 .word 16390 .word -2147482624 .word 8404998 .word -2147483008 .word 8404998 .word -2147481984 .word 16390 .word -2143289344 .word 16390 .word -2143288320 .word 8404998 .word -2143288704 .word 8404998 .word -2143287680 .word 16390 .word -2144862208 .word 16390 .word -2144861184 .word 8404998 .word -2144861568 .word 8404998 .word -2144860544 .word 16390 .word -2140667904 .word 16390 .word -2140666880 .word 8404998 .word -2140667264 .word 8404998 .word -2140666240 .word 10240 .word 0 .word 10240 .word 1024 .word 8398848 .word 640 .word 8398848 .word 1664 .word 10240 .word 4194304 .word 10240 .word 4195328 .word 8398848 .word 4194944 .word 8398848 .word 4195968 .word 10240 .word 2621440 .word 10240 .word 2622464 .word 8398848 .word 2622080 .word 8398848 .word 2623104 .word 10240 .word 6815744 .word 10240 .word 6816768 .word 8398848 .word 6816384 .word 8398848 .word 6817408 .word 10244 .word 0 .word 10244 .word 1024 .word 8398852 .word 640 .word 8398852 .word 1664 .word 10244 .word 4194304 .word 10244 .word 4195328 .word 8398852 .word 4194944 .word 8398852 .word 4195968 .word 10244 .word 2621440 .word 10244 .word 2622464 .word 8398852 .word 2622080 .word 8398852 .word 2623104 .word 10244 .word 6815744 .word 10244 .word 6816768 .word 8398852 .word 6816384 .word 8398852 .word 6817408 .word 10242 .word -2147483648 .word 10242 .word -2147482624 .word 8398850 .word -2147483008 .word 8398850 .word -2147481984 .word 10242 .word -2143289344 .word 10242 .word -2143288320 .word 8398850 .word -2143288704 .word 8398850 .word -2143287680 .word 10242 .word -2144862208 .word 10242 .word -2144861184 .word 8398850 .word -2144861568 .word 8398850 .word -2144860544 .word 10242 .word -2140667904 .word 10242 .word -2140666880 .word 8398850 .word -2140667264 .word 8398850 .word -2140666240 .word 10246 .word -2147483648 .word 10246 .word -2147482624 .word 8398854 .word -2147483008 .word 8398854 .word -2147481984 .word 10246 .word -2143289344 .word 10246 .word -2143288320 .word 8398854 .word -2143288704 .word 8398854 .word -2143287680 .word 10246 .word -2144862208 .word 10246 .word -2144861184 .word 8398854 .word -2144861568 .word 8398854 .word -2144860544 .word 10246 .word -2140667904 .word 10246 .word -2140666880 .word 8398854 .word -2140667264 .word 8398854 .word -2140666240 .word 26624 .word 0 .word 26624 .word 1024 .word 8415232 .word 640 .word 8415232 .word 1664 .word 26624 .word 4194304 .word 26624 .word 4195328 .word 8415232 .word 4194944 .word 8415232 .word 4195968 .word 26624 .word 2621440 .word 26624 .word 2622464 .word 8415232 .word 2622080 .word 8415232 .word 2623104 .word 26624 .word 6815744 .word 26624 .word 6816768 .word 8415232 .word 6816384 .word 8415232 .word 6817408 .word 26628 .word 0 .word 26628 .word 1024 .word 8415236 .word 640 .word 8415236 .word 1664 .word 26628 .word 4194304 .word 26628 .word 4195328 .word 8415236 .word 4194944 .word 8415236 .word 4195968 .word 26628 .word 2621440 .word 26628 .word 2622464 .word 8415236 .word 2622080 .word 8415236 .word 2623104 .word 26628 .word 6815744 .word 26628 .word 6816768 .word 8415236 .word 6816384 .word 8415236 .word 6817408 .word 26626 .word -2147483648 .word 26626 .word -2147482624 .word 8415234 .word -2147483008 .word 8415234 .word -2147481984 .word 26626 .word -2143289344 .word 26626 .word -2143288320 .word 8415234 .word -2143288704 .word 8415234 .word -2143287680 .word 26626 .word -2144862208 .word 26626 .word -2144861184 .word 8415234 .word -2144861568 .word 8415234 .word -2144860544 .word 26626 .word -2140667904 .word 26626 .word -2140666880 .word 8415234 .word -2140667264 .word 8415234 .word -2140666240 .word 26630 .word -2147483648 .word 26630 .word -2147482624 .word 8415238 .word -2147483008 .word 8415238 .word -2147481984 .word 26630 .word -2143289344 .word 26630 .word -2143288320 .word 8415238 .word -2143288704 .word 8415238 .word -2143287680 .word 26630 .word -2144862208 .word 26630 .word -2144861184 .word 8415238 .word -2144861568 .word 8415238 .word -2144860544 .word 26630 .word -2140667904 .word 26630 .word -2140666880 .word 8415238 .word -2140667264 .word 8415238 .word -2140666240 .word 0 .word 0 .word 0 .word 20480 .word 0 .word 2048 .word 0 .word 22528 .word 0 .word 83886080 .word 0 .word 83906560 .word 0 .word 83888128 .word 0 .word 83908608 .word 0 .word 8388608 .word 0 .word 8409088 .word 0 .word 8390656 .word 0 .word 8411136 .word 0 .word 92274688 .word 0 .word 92295168 .word 0 .word 92276736 .word 0 .word 92297216 .word 80 .word 0 .word 80 .word 20480 .word 80 .word 2048 .word 80 .word 22528 .word 80 .word 83886080 .word 80 .word 83906560 .word 80 .word 83888128 .word 80 .word 83908608 .word 80 .word 8388608 .word 80 .word 8409088 .word 80 .word 8390656 .word 80 .word 8411136 .word 80 .word 92274688 .word 80 .word 92295168 .word 80 .word 92276736 .word 80 .word 92297216 .word 8 .word 0 .word 8 .word 20480 .word 8 .word 2048 .word 8 .word 22528 .word 8 .word 83886080 .word 8 .word 83906560 .word 8 .word 83888128 .word 8 .word 83908608 .word 8 .word 8388608 .word 8 .word 8409088 .word 8 .word 8390656 .word 8 .word 8411136 .word 8 .word 92274688 .word 8 .word 92295168 .word 8 .word 92276736 .word 8 .word 92297216 .word 88 .word 0 .word 88 .word 20480 .word 88 .word 2048 .word 88 .word 22528 .word 88 .word 83886080 .word 88 .word 83906560 .word 88 .word 83888128 .word 88 .word 83908608 .word 88 .word 8388608 .word 88 .word 8409088 .word 88 .word 8390656 .word 88 .word 8411136 .word 88 .word 92274688 .word 88 .word 92295168 .word 88 .word 92276736 .word 88 .word 92297216 .word 327680 .word 4 .word 327680 .word 20484 .word 327680 .word 2052 .word 327680 .word 22532 .word 327680 .word 83886084 .word 327680 .word 83906564 .word 327680 .word 83888132 .word 327680 .word 83908612 .word 327680 .word 8388612 .word 327680 .word 8409092 .word 327680 .word 8390660 .word 327680 .word 8411140 .word 327680 .word 92274692 .word 327680 .word 92295172 .word 327680 .word 92276740 .word 327680 .word 92297220 .word 327760 .word 4 .word 327760 .word 20484 .word 327760 .word 2052 .word 327760 .word 22532 .word 327760 .word 83886084 .word 327760 .word 83906564 .word 327760 .word 83888132 .word 327760 .word 83908612 .word 327760 .word 8388612 .word 327760 .word 8409092 .word 327760 .word 8390660 .word 327760 .word 8411140 .word 327760 .word 92274692 .word 327760 .word 92295172 .word 327760 .word 92276740 .word 327760 .word 92297220 .word 327688 .word 4 .word 327688 .word 20484 .word 327688 .word 2052 .word 327688 .word 22532 .word 327688 .word 83886084 .word 327688 .word 83906564 .word 327688 .word 83888132 .word 327688 .word 83908612 .word 327688 .word 8388612 .word 327688 .word 8409092 .word 327688 .word 8390660 .word 327688 .word 8411140 .word 327688 .word 92274692 .word 327688 .word 92295172 .word 327688 .word 92276740 .word 327688 .word 92297220 .word 327768 .word 4 .word 327768 .word 20484 .word 327768 .word 2052 .word 327768 .word 22532 .word 327768 .word 83886084 .word 327768 .word 83906564 .word 327768 .word 83888132 .word 327768 .word 83908612 .word 327768 .word 8388612 .word 327768 .word 8409092 .word 327768 .word 8390660 .word 327768 .word 8411140 .word 327768 .word 92274692 .word 327768 .word 92295172 .word 327768 .word 92276740 .word 327768 .word 92297220 .word 32768 .word 0 .word 32768 .word 20480 .word 32768 .word 2048 .word 32768 .word 22528 .word 32768 .word 83886080 .word 32768 .word 83906560 .word 32768 .word 83888128 .word 32768 .word 83908608 .word 32768 .word 8388608 .word 32768 .word 8409088 .word 32768 .word 8390656 .word 32768 .word 8411136 .word 32768 .word 92274688 .word 32768 .word 92295168 .word 32768 .word 92276736 .word 32768 .word 92297216 .word 32848 .word 0 .word 32848 .word 20480 .word 32848 .word 2048 .word 32848 .word 22528 .word 32848 .word 83886080 .word 32848 .word 83906560 .word 32848 .word 83888128 .word 32848 .word 83908608 .word 32848 .word 8388608 .word 32848 .word 8409088 .word 32848 .word 8390656 .word 32848 .word 8411136 .word 32848 .word 92274688 .word 32848 .word 92295168 .word 32848 .word 92276736 .word 32848 .word 92297216 .word 32776 .word 0 .word 32776 .word 20480 .word 32776 .word 2048 .word 32776 .word 22528 .word 32776 .word 83886080 .word 32776 .word 83906560 .word 32776 .word 83888128 .word 32776 .word 83908608 .word 32776 .word 8388608 .word 32776 .word 8409088 .word 32776 .word 8390656 .word 32776 .word 8411136 .word 32776 .word 92274688 .word 32776 .word 92295168 .word 32776 .word 92276736 .word 32776 .word 92297216 .word 32856 .word 0 .word 32856 .word 20480 .word 32856 .word 2048 .word 32856 .word 22528 .word 32856 .word 83886080 .word 32856 .word 83906560 .word 32856 .word 83888128 .word 32856 .word 83908608 .word 32856 .word 8388608 .word 32856 .word 8409088 .word 32856 .word 8390656 .word 32856 .word 8411136 .word 32856 .word 92274688 .word 32856 .word 92295168 .word 32856 .word 92276736 .word 32856 .word 92297216 .word 360448 .word 4 .word 360448 .word 20484 .word 360448 .word 2052 .word 360448 .word 22532 .word 360448 .word 83886084 .word 360448 .word 83906564 .word 360448 .word 83888132 .word 360448 .word 83908612 .word 360448 .word 8388612 .word 360448 .word 8409092 .word 360448 .word 8390660 .word 360448 .word 8411140 .word 360448 .word 92274692 .word 360448 .word 92295172 .word 360448 .word 92276740 .word 360448 .word 92297220 .word 360528 .word 4 .word 360528 .word 20484 .word 360528 .word 2052 .word 360528 .word 22532 .word 360528 .word 83886084 .word 360528 .word 83906564 .word 360528 .word 83888132 .word 360528 .word 83908612 .word 360528 .word 8388612 .word 360528 .word 8409092 .word 360528 .word 8390660 .word 360528 .word 8411140 .word 360528 .word 92274692 .word 360528 .word 92295172 .word 360528 .word 92276740 .word 360528 .word 92297220 .word 360456 .word 4 .word 360456 .word 20484 .word 360456 .word 2052 .word 360456 .word 22532 .word 360456 .word 83886084 .word 360456 .word 83906564 .word 360456 .word 83888132 .word 360456 .word 83908612 .word 360456 .word 8388612 .word 360456 .word 8409092 .word 360456 .word 8390660 .word 360456 .word 8411140 .word 360456 .word 92274692 .word 360456 .word 92295172 .word 360456 .word 92276740 .word 360456 .word 92297220 .word 360536 .word 4 .word 360536 .word 20484 .word 360536 .word 2052 .word 360536 .word 22532 .word 360536 .word 83886084 .word 360536 .word 83906564 .word 360536 .word 83888132 .word 360536 .word 83908612 .word 360536 .word 8388612 .word 360536 .word 8409092 .word 360536 .word 8390660 .word 360536 .word 8411140 .word 360536 .word 92274692 .word 360536 .word 92295172 .word 360536 .word 92276740 .word 360536 .word 92297220 .type des_ip_table,#object .size des_ip_table,4096 .section ".data",#alloc .align 32 des_enc_const: #ifdef __sparcv9 ! ! For v9, the addresses ar 64-bit long, so we should use .xword ! instead of .word, this makes the constant table bigger ! .xword (des_ip_table+0x0) ! initial permutation table .xword (des_ip_table+0x800) .xword (des_fp_table+0x0) ! final permutation table .xword (des_sbox_table+0x0) ! sboxes table .xword (des_sbox_table+0x200) .xword (des_sbox_table+0x400) .xword (des_sbox_table+0x600) .xword (des_sbox_table+0x800) .xword (des_sbox_table+0xa00) .xword (des_sbox_table+0xc00) .xword (des_sbox_table+0xe00) .word 0 ! for alignment .word 7 ! counter for encrypt loop .word 16515072 ! top_1 .word 0 ! .word 262143 ! mid_4 .word -67108864 ! .word 0 ! low_3 .word 67108608 ! .word -1431655766 ! 0xaaaaaaaaaaaaaaaa .word -1431655766 ! .word 1431655765 ! 0x5555555555555555 .word 1431655765 ! #else ! ! For v8, the addresses are 32-bit long ! .word (des_ip_table+0x0) ! initial permutation table .word (des_ip_table+0x800) .word (des_fp_table+0x0) ! final permutation table .word (des_sbox_table+0x0) ! sboxes table .word (des_sbox_table+0x200) .word (des_sbox_table+0x400) .word (des_sbox_table+0x600) .word (des_sbox_table+0x800) .word (des_sbox_table+0xa00) .word (des_sbox_table+0xc00) .word (des_sbox_table+0xe00) .word 7 ! counter for encrypt loop .word 16515072 ! top_1 .word 0 ! .word 262143 ! mid_4 .word -67108864 ! .word 0 ! low_3 .word 67108608 ! .word -1431655766 ! 0xaaaaaaaaaaaaaaaa .word -1431655766 ! .word 1431655765 ! 0x5555555555555555 .word 1431655765 ! #endif .type des_enc_const,#object .size des_enc_const,(.-des_enc_const) .section ".text",#alloc,#execinstr /* 000000 0 */ .align 32 /* 000000 */ .skip 32 ! ! SUBROUTINE des_crypt_impl ! ! OFFSET SOURCE LINE LABEL INSTRUCTION .global des_crypt_impl ! uint64_t des_crypt_impl(uint64_t *ks, uint64_t block, int one_or_three); ! ! ks is the key schedule, en/decryption is differentiated by computing ! an encryption key schedule for encryption and the reverse of it ! for decryption (for DES, 16 entries, for triple-DES, 48 entries) ! block is the 64-bit block to en/decrypt ! one_or_three is 1 for DES and 3 for triple-DES des_crypt_impl: #ifdef __sparcv9 save %sp,-192,%sp #ifdef PIC .L0: call . + 8 sethi %hi(_GLOBAL_OFFSET_TABLE_ - (.L0 - .)), %o1 sethi %hi(des_enc_const), %g1 or %o1, %lo(_GLOBAL_OFFSET_TABLE_ - (.L0 - .)), %o1 or %g1, %lo(des_enc_const),%g1 add %o1, %o7, %o1 #else sethi %hh(des_enc_const),%o1 sethi %lm(des_enc_const),%g1 or %o1,%hm(des_enc_const),%o1 or %g1,%lo(des_enc_const),%g1 sllx %o1,32,%o1 #endif sethi %hi(0xaaaaaaaa), %g3 #ifdef PIC ldx [%o1 + %g1], %i5 #else or %o1,%g1,%i5 ! &des_enc_const #endif or %g3, %lo(0xaaaaaaaa), %g3 sllx %g3, 32, %o0 or %g3, %o0, %g3 ! 0xaaaaaaaaaaaaaaaa srlx %g3, 1, %g2 ! 0x5555555555555555 and %i1, %g3, %g1 sllx %g1, 7, %g3 ldx [%i5 + 0], %l7 ! &(des_ip_table[0][0]) and %i1, %g2, %g2 srlx %g2, 7, %g4 ldx [%i5 + 8], %l6 ! &(des_ip_table[1][0]) or %g1, %g3, %g1 srlx %g1, 21, %o0 ld [%i5 + 92], %i4 ! 7 (for iteration counter) or %g2, %g4, %g2 srlx %g1, 5, %o1 ldx [%i5 + 24], %l0 ! &(des_sbox_table[0][0]) and %o0, 0x7f8, %o0 srlx %g2, 13, %o2 ldx [%l7 + %o0], %o0 and %o1, 0x7f8, %o1 sllx %g2, 3, %o3 ldx [%l6 + %o1], %o1 and %o2, 0x7f8, %o2 srlx %g1, 53, %o4 ldx [%l7 + %o2], %o2 and %o3, 0x7f8, %o3 srlx %g1, 37, %o5 ldx [%l6 + %o3], %o3 and %o4, 0x7f8, %o4 srlx %g2, 45, %g1 ldx [%l7 + %o4], %o4 and %o5, 0x7f8, %o5 srlx %g2, 29, %g2 ldx [%l6 + %o5], %o5 and %g1, 0x7f8, %g1 sllx %o0, 6, %o0 ldx [%l7 + %g1], %g1 and %g2, 0x7f8, %g2 sllx %o1, 6, %o1 ldx [%l6 + %g2], %g2 or %o4, %o5, %o4 sllx %o2, 6, %o2 ldx [%i5 + 32], %l1 ! &(des_sbox_table[1][0]) or %o0, %o1, %o0 sllx %o3, 6, %o3 ldx [%i5 + 96], %g3 ! top_1 or %o0, %o4, %o0 or %g1, %g2, %g1 ldx [%i5 + 104], %g4 ! mid_4 or %o2, %o3, %o2 and %o0, %g3, %o4 ldx [%i5 + 112], %g2 ! low_3 or %o2, %g1, %o1 sllx %o4, 8, %o4 ldx [%i5 + 40], %l2 ! &(des_sbox_table[2][0]) and %o1, %g3, %o5 sllx %o5, 8, %o5 ldx [%i5 + 48], %l3 ! &(des_sbox_table[3][0]) and %o0, %g2, %o2 srlx %o2, 5, %o2 ldx [%i5 + 56], %l4 ! &(des_sbox_table[4][0]) and %o1, %g2, %o3 srlx %o3, 5, %o3 ldx [%i0], %g2 ! ks[0] and %o0, %g4, %o0 or %o0, %o2, %o0 ldx [%i5 + 64], %l5 ! &(des_sbox_table[5][0]) and %o1, %g4, %o1 or %o0, %o4, %o0 ldx [%i5 + 72], %l6 ! &(des_sbox_table[6][0]) or %o1, %o3, %o1 xor %o0, %g2, %g1 ldx [%i5 + 80], %l7 ! &(des_sbox_table[7][0]) or %o1, %o5, %o1 #else ! v8 version save %sp,-144,%sp sethi %hi(des_enc_const), %g2 #ifdef PIC .L1: call .+8 sethi %hi(_GLOBAL_OFFSET_TABLE_ - (.L1 - .)), %g1 or %g1, %lo(_GLOBAL_OFFSET_TABLE_ - (.L1 - .)), %g1 or %g2, %lo(des_enc_const), %g2 #else or %g2, %lo(des_enc_const), %i5 #endif srl %i2, 0, %g4 sethi %hi(0xaaaaaaaa), %g3 sllx %i1, 32, %g5 or %g3, %lo(0xaaaaaaaa), %g3 sllx %g3, 32, %o0 add %o7, %g1, %g1 or %g3, %o0, %g3 ! 0xaaaaaaaaaaaaaaaa #ifdef PIC ld [%g1 + %g2], %i5 #endif or %g4, %g5, %g4 srlx %g3, 1, %g2 ! 0x5555555555555555 and %g4, %g3, %g1 sllx %g1, 7, %g3 ld [%i5 + 0], %l7 ! &(des_ip_table[0][0]) and %g4, %g2, %g2 srlx %g2, 7, %g4 ld [%i5 + 4], %l6 ! &(des_ip_table[1][0]) or %g1, %g3, %g1 srlx %g1, 21, %o0 ld [%i5 + 44], %i4 ! 7 (for iteration counter) or %g2, %g4, %g2 srlx %g1, 5, %o1 ld [%i5 + 12], %l0 ! &(des_sbox_table[0][0]) and %o0, 0x7f8, %o0 srlx %g2, 13, %o2 ldx [%l7 + %o0], %o0 and %o1, 0x7f8, %o1 sllx %g2, 3, %o3 ldx [%l6 + %o1], %o1 and %o2, 0x7f8, %o2 srlx %g1, 53, %o4 ldx [%l7 + %o2], %o2 and %o3, 0x7f8, %o3 srlx %g1, 37, %o5 ldx [%l6 + %o3], %o3 and %o4, 0x7f8, %o4 srlx %g2, 45, %g1 ldx [%l7 + %o4], %o4 and %o5, 0x7f8, %o5 srlx %g2, 29, %g2 ldx [%l6 + %o5], %o5 and %g1, 0x7f8, %g1 sllx %o0, 6, %o0 ldx [%l7 + %g1], %g1 and %g2, 0x7f8, %g2 sllx %o1, 6, %o1 ldx [%l6 + %g2], %g2 or %o4, %o5, %o4 sllx %o2, 6, %o2 ld [%i5 + 16], %l1 ! &(des_sbox_table[1][0]) or %o0, %o1, %o0 sllx %o3, 6, %o3 ldx [%i5 + 48], %g3 ! top_1 or %o0, %o4, %o0 or %g1, %g2, %g1 ldx [%i5 + 56], %g4 ! mid_4 or %o2, %o3, %o2 and %o0, %g3, %o4 ldx [%i5 + 64], %g2 ! low_3 or %o2, %g1, %o1 sllx %o4, 8, %o4 ld [%i5 + 20], %l2 ! &(des_sbox_table[2][0]) and %o1, %g3, %o5 sllx %o5, 8, %o5 ld [%i5 + 24], %l3 ! &(des_sbox_table[3][0]) and %o0, %g2, %o2 srlx %o2, 5, %o2 ld [%i5 + 28], %l4 ! &(des_sbox_table[4][0]) and %o1, %g2, %o3 srlx %o3, 5, %o3 ldx [%i0], %g2 ! ks[0] and %o0, %g4, %o0 or %o0, %o2, %o0 ld [%i5 + 32], %l5 ! &(des_sbox_table[5][0]) and %o1, %g4, %o1 or %o0, %o4, %o0 ld [%i5 + 36], %l6 ! &(des_sbox_table[6][0]) or %o1, %o3, %o1 xor %o0, %g2, %g1 ld [%i5 + 40], %l7 ! &(des_sbox_table[7][0]) or %o1, %o5, %o1 #endif .L2: srlx %g1, 55, %g1 xor %o0, %g2, %o5 .L3: srlx %o5, 41, %g3 ldx [%l0 + %g1], %g1 and %o5, 0x1f8, %g2 srlx %o5, 29, %g4 ldx [%l7 + %g2], %g2 and %g3, 0x1f8, %g3 srlx %o5, 12, %o2 ldx [%l1 + %g3], %g3 and %g4, 0x1f8, %g4 srlx %o5, 35, %o3 ldx [%l3 + %g4], %g4 and %o2, 0x1f8, %o2 srlx %o5, 6, %o4 ldx [%l5 + %o2], %o2 and %o3, 0x1f8, %o3 or %g1, %g2, %g2 ldx [%l2 + %o3], %o3 and %o4, 0x1f8, %o4 srl %o5, 23, %o5 ldx [%l6 + %o4], %o4 or %g3, %g4, %g4 or %g2, %g4, %g4 ldx [%l4 + %o5], %o5 or %o2, %o3, %o3 or %g4, %o3, %o3 ldx [%i0 + 8], %g2 add %i0, 16, %i0 xor %o1, %o3, %o1 or %o4, %o5, %o5 xor %o1, %g2, %g1 xor %o1, %o5, %o1 srl %g1, 23, %g1 xor %o1, %g2, %o5 srlx %o5, 41, %g3 ldx [%l4 + %g1], %g1 and %o5, 0x1f8, %g2 srlx %o5, 29, %g4 ldx [%l7 + %g2], %g2 and %g3, 0x1f8, %g3 srlx %o5, 12, %o2 ldx [%l1 + %g3], %g3 and %g4, 0x1f8, %g4 srlx %o5, 6, %o3 ldx [%l3 + %g4], %g4 and %o2, 0x1f8, %o2 srlx %o5, 35, %o4 ldx [%l5 + %o2], %o2 and %o3, 0x1f8, %o3 or %g1, %g2, %g2 ldx [%l6 + %o3], %o3 and %o4, 0x1f8, %o4 srlx %o5, 55, %o5 ldx [%l2 + %o4], %o4 or %g3, %g4, %g4 or %g2, %g4, %g4 ldx [%l0 + %o5], %o5 or %o2, %o3, %o3 or %g4, %o3, %o3 ldx [%i0], %g2 subcc %i4,1,%i4 xor %o0, %o3, %o0 or %o4, %o5, %o5 xor %o0, %g2, %g1 ! bnz %icc, .L2 xor %o0, %o5, %o0 srlx %g1, 55, %g1 xor %o0, %g2, %o5 srlx %o5, 41, %g3 ldx [%l0 + %g1], %g1 and %o5, 0x1f8, %g2 srlx %o5, 29, %g4 ldx [%l7 + %g2], %g2 and %g3, 0x1f8, %g3 srlx %o5, 12, %o2 ldx [%l1 + %g3], %g3 and %g4, 0x1f8, %g4 srlx %o5, 35, %o3 ldx [%l3 + %g4], %g4 and %o2, 0x1f8, %o2 srlx %o5, 6, %o4 ldx [%l5 + %o2], %o2 and %o3, 0x1f8, %o3 or %g1, %g2, %g2 ldx [%l2 + %o3], %o3 and %o4, 0x1f8, %o4 srl %o5, 23, %o5 ldx [%l6 + %o4], %o4 or %g3, %g4, %g4 or %g2, %g4, %g4 ldx [%l4 + %o5], %o5 or %o2, %o3, %o3 or %g4, %o3, %o3 ldx [%i0 + 8], %g2 add %i0, 16, %i0 xor %o1, %o3, %o1 or %o4, %o5, %o5 xor %o1, %g2, %g1 xor %o1, %o5, %o1 srl %g1, 23, %g1 xor %o1, %g2, %o5 srlx %o5, 41, %g3 ldx [%l4 + %g1], %g1 and %o5, 0x1f8, %g2 srlx %o5, 29, %g4 ldx [%l7 + %g2], %g2 and %g3, 0x1f8, %g3 srlx %o5, 12, %o2 ldx [%l1 + %g3], %g3 and %g4, 0x1f8, %g4 srlx %o5, 6, %o3 ldx [%l3 + %g4], %g4 and %o2, 0x1f8, %o2 srlx %o5, 35, %o4 ldx [%l5 + %o2], %o2 and %o3, 0x1f8, %o3 or %g1, %g2, %g2 ldx [%l6 + %o3], %o3 and %o4, 0x1f8, %o4 srlx %o5, 55, %o5 ldx [%l2 + %o4], %o4 or %g3, %g4, %g4 or %g2, %g4, %g4 ldx [%l0 + %o5], %o5 or %o2, %o3, %o3 or %g4, %o3, %o3 ldx [%i0], %g2 subcc %i4,1,%i4 xor %o0, %o3, %o0 or %o4, %o5, %o5 xor %o0, %g2, %g1 ! bnz %icc, .L2 xor %o0, %o5, %o0 srlx %g1, 55, %g1 xor %o0, %g2, %o5 srlx %o5, 41, %g3 ldx [%l0 + %g1], %g1 and %o5, 0x1f8, %g2 srlx %o5, 29, %g4 ldx [%l7 + %g2], %g2 and %g3, 0x1f8, %g3 srlx %o5, 12, %o2 ldx [%l1 + %g3], %g3 and %g4, 0x1f8, %g4 srlx %o5, 35, %o3 ldx [%l3 + %g4], %g4 and %o2, 0x1f8, %o2 srlx %o5, 6, %o4 ldx [%l5 + %o2], %o2 and %o3, 0x1f8, %o3 or %g1, %g2, %g2 ldx [%l2 + %o3], %o3 and %o4, 0x1f8, %o4 srl %o5, 23, %o5 ldx [%l6 + %o4], %o4 or %g3, %g4, %g4 or %g2, %g4, %g4 ldx [%l4 + %o5], %o5 or %o2, %o3, %o3 or %g4, %o3, %o3 ldx [%i0 + 8], %g2 add %i0, 16, %i0 xor %o1, %o3, %o1 or %o4, %o5, %o5 xor %o1, %g2, %g1 xor %o1, %o5, %o1 srl %g1, 23, %g1 xor %o1, %g2, %o5 srlx %o5, 41, %g3 ldx [%l4 + %g1], %g1 and %o5, 0x1f8, %g2 srlx %o5, 29, %g4 ldx [%l7 + %g2], %g2 and %g3, 0x1f8, %g3 srlx %o5, 12, %o2 ldx [%l1 + %g3], %g3 and %g4, 0x1f8, %g4 srlx %o5, 6, %o3 ldx [%l3 + %g4], %g4 and %o2, 0x1f8, %o2 srlx %o5, 35, %o4 ldx [%l5 + %o2], %o2 and %o3, 0x1f8, %o3 or %g1, %g2, %g2 ldx [%l6 + %o3], %o3 and %o4, 0x1f8, %o4 srlx %o5, 55, %o5 ldx [%l2 + %o4], %o4 or %g3, %g4, %g4 or %g2, %g4, %g4 ldx [%l0 + %o5], %o5 or %o2, %o3, %o3 or %g4, %o3, %o3 ldx [%i0], %g2 subcc %i4,1,%i4 xor %o0, %o3, %o0 or %o4, %o5, %o5 xor %o0, %g2, %g1 ! bnz %icc, .L2 xor %o0, %o5, %o0 srlx %g1, 55, %g1 xor %o0, %g2, %o5 srlx %o5, 41, %g3 ldx [%l0 + %g1], %g1 and %o5, 0x1f8, %g2 srlx %o5, 29, %g4 ldx [%l7 + %g2], %g2 and %g3, 0x1f8, %g3 srlx %o5, 12, %o2 ldx [%l1 + %g3], %g3 and %g4, 0x1f8, %g4 srlx %o5, 35, %o3 ldx [%l3 + %g4], %g4 and %o2, 0x1f8, %o2 srlx %o5, 6, %o4 ldx [%l5 + %o2], %o2 and %o3, 0x1f8, %o3 or %g1, %g2, %g2 ldx [%l2 + %o3], %o3 and %o4, 0x1f8, %o4 srl %o5, 23, %o5 ldx [%l6 + %o4], %o4 or %g3, %g4, %g4 or %g2, %g4, %g4 ldx [%l4 + %o5], %o5 or %o2, %o3, %o3 or %g4, %o3, %o3 ldx [%i0 + 8], %g2 add %i0, 16, %i0 xor %o1, %o3, %o1 or %o4, %o5, %o5 xor %o1, %g2, %g1 xor %o1, %o5, %o1 srl %g1, 23, %g1 xor %o1, %g2, %o5 srlx %o5, 41, %g3 ldx [%l4 + %g1], %g1 and %o5, 0x1f8, %g2 srlx %o5, 29, %g4 ldx [%l7 + %g2], %g2 and %g3, 0x1f8, %g3 srlx %o5, 12, %o2 ldx [%l1 + %g3], %g3 and %g4, 0x1f8, %g4 srlx %o5, 6, %o3 ldx [%l3 + %g4], %g4 and %o2, 0x1f8, %o2 srlx %o5, 35, %o4 ldx [%l5 + %o2], %o2 and %o3, 0x1f8, %o3 or %g1, %g2, %g2 ldx [%l6 + %o3], %o3 and %o4, 0x1f8, %o4 srlx %o5, 55, %o5 ldx [%l2 + %o4], %o4 or %g3, %g4, %g4 or %g2, %g4, %g4 ldx [%l0 + %o5], %o5 or %o2, %o3, %o3 or %g4, %o3, %o3 ldx [%i0], %g2 subcc %i4,1,%i4 xor %o0, %o3, %o0 or %o4, %o5, %o5 xor %o0, %g2, %g1 ! bnz %icc, .L2 xor %o0, %o5, %o0 srlx %g1, 55, %g1 xor %o0, %g2, %o5 srlx %o5, 41, %g3 ldx [%l0 + %g1], %g1 and %o5, 0x1f8, %g2 srlx %o5, 29, %g4 ldx [%l7 + %g2], %g2 and %g3, 0x1f8, %g3 srlx %o5, 12, %o2 ldx [%l1 + %g3], %g3 and %g4, 0x1f8, %g4 srlx %o5, 35, %o3 ldx [%l3 + %g4], %g4 and %o2, 0x1f8, %o2 srlx %o5, 6, %o4 ldx [%l5 + %o2], %o2 and %o3, 0x1f8, %o3 or %g1, %g2, %g2 ldx [%l2 + %o3], %o3 and %o4, 0x1f8, %o4 srl %o5, 23, %o5 ldx [%l6 + %o4], %o4 or %g3, %g4, %g4 or %g2, %g4, %g4 ldx [%l4 + %o5], %o5 or %o2, %o3, %o3 or %g4, %o3, %o3 ldx [%i0 + 8], %g2 add %i0, 16, %i0 xor %o1, %o3, %o1 or %o4, %o5, %o5 xor %o1, %g2, %g1 xor %o1, %o5, %o1 srl %g1, 23, %g1 xor %o1, %g2, %o5 srlx %o5, 41, %g3 ldx [%l4 + %g1], %g1 and %o5, 0x1f8, %g2 srlx %o5, 29, %g4 ldx [%l7 + %g2], %g2 and %g3, 0x1f8, %g3 srlx %o5, 12, %o2 ldx [%l1 + %g3], %g3 and %g4, 0x1f8, %g4 srlx %o5, 6, %o3 ldx [%l3 + %g4], %g4 and %o2, 0x1f8, %o2 srlx %o5, 35, %o4 ldx [%l5 + %o2], %o2 and %o3, 0x1f8, %o3 or %g1, %g2, %g2 ldx [%l6 + %o3], %o3 and %o4, 0x1f8, %o4 srlx %o5, 55, %o5 ldx [%l2 + %o4], %o4 or %g3, %g4, %g4 or %g2, %g4, %g4 ldx [%l0 + %o5], %o5 or %o2, %o3, %o3 or %g4, %o3, %o3 ldx [%i0], %g2 subcc %i4,1,%i4 xor %o0, %o3, %o0 or %o4, %o5, %o5 xor %o0, %g2, %g1 ! bnz %icc, .L2 xor %o0, %o5, %o0 srlx %g1, 55, %g1 xor %o0, %g2, %o5 srlx %o5, 41, %g3 ldx [%l0 + %g1], %g1 and %o5, 0x1f8, %g2 srlx %o5, 29, %g4 ldx [%l7 + %g2], %g2 and %g3, 0x1f8, %g3 srlx %o5, 12, %o2 ldx [%l1 + %g3], %g3 and %g4, 0x1f8, %g4 srlx %o5, 35, %o3 ldx [%l3 + %g4], %g4 and %o2, 0x1f8, %o2 srlx %o5, 6, %o4 ldx [%l5 + %o2], %o2 and %o3, 0x1f8, %o3 or %g1, %g2, %g2 ldx [%l2 + %o3], %o3 and %o4, 0x1f8, %o4 srl %o5, 23, %o5 ldx [%l6 + %o4], %o4 or %g3, %g4, %g4 or %g2, %g4, %g4 ldx [%l4 + %o5], %o5 or %o2, %o3, %o3 or %g4, %o3, %o3 ldx [%i0 + 8], %g2 add %i0, 16, %i0 xor %o1, %o3, %o1 or %o4, %o5, %o5 xor %o1, %g2, %g1 xor %o1, %o5, %o1 srl %g1, 23, %g1 xor %o1, %g2, %o5 srlx %o5, 41, %g3 ldx [%l4 + %g1], %g1 and %o5, 0x1f8, %g2 srlx %o5, 29, %g4 ldx [%l7 + %g2], %g2 and %g3, 0x1f8, %g3 srlx %o5, 12, %o2 ldx [%l1 + %g3], %g3 and %g4, 0x1f8, %g4 srlx %o5, 6, %o3 ldx [%l3 + %g4], %g4 and %o2, 0x1f8, %o2 srlx %o5, 35, %o4 ldx [%l5 + %o2], %o2 and %o3, 0x1f8, %o3 or %g1, %g2, %g2 ldx [%l6 + %o3], %o3 and %o4, 0x1f8, %o4 srlx %o5, 55, %o5 ldx [%l2 + %o4], %o4 or %g3, %g4, %g4 or %g2, %g4, %g4 ldx [%l0 + %o5], %o5 or %o2, %o3, %o3 or %g4, %o3, %o3 ldx [%i0], %g2 subcc %i4,1,%i4 xor %o0, %o3, %o0 or %o4, %o5, %o5 xor %o0, %g2, %g1 ! bnz %icc, .L2 xor %o0, %o5, %o0 srlx %g1, 55, %g1 xor %o0, %g2, %o5 srlx %o5, 41, %g3 ldx [%l0 + %g1], %g1 and %o5, 0x1f8, %g2 srlx %o5, 29, %g4 ldx [%l7 + %g2], %g2 and %g3, 0x1f8, %g3 srlx %o5, 12, %o2 ldx [%l1 + %g3], %g3 and %g4, 0x1f8, %g4 srlx %o5, 35, %o3 ldx [%l3 + %g4], %g4 and %o2, 0x1f8, %o2 srlx %o5, 6, %o4 ldx [%l5 + %o2], %o2 and %o3, 0x1f8, %o3 or %g1, %g2, %g2 ldx [%l2 + %o3], %o3 and %o4, 0x1f8, %o4 srl %o5, 23, %o5 ldx [%l6 + %o4], %o4 or %g3, %g4, %g4 or %g2, %g4, %g4 ldx [%l4 + %o5], %o5 or %o2, %o3, %o3 or %g4, %o3, %o3 ldx [%i0 + 8], %g2 add %i0, 16, %i0 xor %o1, %o3, %o1 or %o4, %o5, %o5 xor %o1, %g2, %g1 xor %o1, %o5, %o1 srl %g1, 23, %g1 xor %o1, %g2, %o5 srlx %o5, 41, %g3 ldx [%l4 + %g1], %g1 and %o5, 0x1f8, %g2 srlx %o5, 29, %g4 ldx [%l7 + %g2], %g2 and %g3, 0x1f8, %g3 srlx %o5, 12, %o2 ldx [%l1 + %g3], %g3 and %g4, 0x1f8, %g4 srlx %o5, 6, %o3 ldx [%l3 + %g4], %g4 and %o2, 0x1f8, %o2 srlx %o5, 35, %o4 ldx [%l5 + %o2], %o2 and %o3, 0x1f8, %o3 or %g1, %g2, %g2 ldx [%l6 + %o3], %o3 and %o4, 0x1f8, %o4 srlx %o5, 55, %o5 ldx [%l2 + %o4], %o4 or %g3, %g4, %g4 or %g2, %g4, %g4 ldx [%l0 + %o5], %o5 or %o2, %o3, %o3 or %g4, %o3, %o3 ldx [%i0], %g2 subcc %i4,1,%i4 xor %o0, %o3, %o0 or %o4, %o5, %o5 xor %o0, %g2, %g1 ! bnz %icc, .L2 xor %o0, %o5, %o0 srlx %g1, 55, %g1 xor %o0, %g2, %o5 srlx %o5, 41, %g3 ldx [%l0 + %g1], %g1 and %o5, 0x1f8, %g2 srlx %o5, 29, %g4 ldx [%l7 + %g2], %g2 and %g3, 0x1f8, %g3 srlx %o5, 12, %o2 ldx [%l1 + %g3], %g3 and %g4, 0x1f8, %g4 srlx %o5, 35, %o3 ldx [%l3 + %g4], %g4 and %o2, 0x1f8, %o2 srlx %o5, 6, %o4 ldx [%l5 + %o2], %o2 and %o3, 0x1f8, %o3 or %g1, %g2, %g2 ldx [%l2 + %o3], %o3 and %o4, 0x1f8, %o4 srl %o5, 23, %o5 ldx [%l6 + %o4], %o4 or %g3, %g4, %g4 or %g2, %g4, %g4 ldx [%l4 + %o5], %o5 or %o2, %o3, %o3 or %g4, %o3, %o3 ldx [%i0 + 8], %g2 #ifdef __sparcv9 subcc %i2, 1, %i2 ! one_or_three for v9 #else subcc %i3, 1, %i3 ! one_or_three for v8 #endif xor %o1, %o3, %o1 or %o4, %o5, %o5 xor %o1, %g2, %g1 xor %o1, %o5, %g5 srl %g1, 23, %g1 xor %g5, %g2, %o5 srlx %o5, 41, %g3 ldx [%l4 + %g1], %g1 and %o5, 0x1f8, %g2 srlx %o5, 29, %g4 ldx [%l7 + %g2], %g2 and %g3, 0x1f8, %g3 srlx %o5, 12, %o2 ldx [%l1 + %g3], %g3 and %g4, 0x1f8, %g4 srlx %o5, 6, %o3 ldx [%l3 + %g4], %g4 and %o2, 0x1f8, %o2 srlx %o5, 35, %o4 ldx [%l5 + %o2], %o2 and %o3, 0x1f8, %o3 or %g1, %g2, %g2 ldx [%l6 + %o3], %o3 and %o4, 0x1f8, %o4 srlx %o5, 55, %o5 ldx [%l2 + %o4], %o4 or %g3, %g4, %g4 or %g2, %g4, %g4 ldx [%l0 + %o5], %o5 bz,pn %icc, .L4 ! if finished (one or three iterations or %o2, %o3, %o3 ! of the 16 rounds), go to final perm. or %g4, %o3, %o3 ldx [%i0 + 16], %g2 add %i0, 16, %i0 xor %o0, %o3, %o0 or %o4, %o5, %o4 xor %g5, %g2, %o5 xor %o0, %o4, %o1 srlx %o5, 55, %g1 ba .L3 or %g5, %g0, %o0 .L4: or %g4, %o3, %o3 #ifdef __sparcv9 ldx [%i5 + 16], %i5 ! &(dec_fp_table[0]) #else ld [%i5 + 8], %i5 ! &(dec_fp_table[0]) #endif or %g0, 0xf, %g4 xor %o0, %o3, %o0 or %o4, %o5, %o5 sllx %g4, 59, %g4 ! mask for bits 1-4 xor %o0, %o5, %o0 ! fp starts here srlx %o0, 33, %g1 and %o0, %g4, %g2 srlx %g5, 37, %l0 and %g5, %g4, %g3 srlx %g2, 53, %g2 and %g1, 0x3c0, %g1 srlx %g3, 57, %l1 and %l0, 0x3c, %l0 srlx %o0, 21, %g3 or %g1, %l0, %l0 srlx %g5, 25, %l2 ld [%i5 + %l0], %l0 or %l1, %g2, %l1 srlx %o0, 4, %g4 ld [%i5 + %l1], %l1 and %g3, 0x3c0, %g3 srlx %g5, 8, %l3 and %l2, 0x3c, %l2 srlx %o0, 27, %g1 or %l2, %g3, %l2 srlx %g5, 31, %l4 ld [%i5 + %l2], %l2 and %g4, 0x3c0, %g4 and %l3, 0x3c, %l3 and %g1, 0x3c0, %g1 srlx %o0, 10, %g2 or %l3, %g4, %l3 srlx %g5, 14, %l5 ld [%i5 + %l3], %l3 and %l4, 0x3c, %l4 sllx %o0, 2, %g3 or %l4, %g1, %l4 srlx %g5, 2, %l6 ld [%i5 + %l4], %l4 and %g2, 0x3c0, %g2 srlx %o0, 39, %g4 and %l5, 0x3c, %l5 and %g3, 0x3c0, %g3 or %l5, %g2, %l5 srlx %g5, 43, %l7 ld [%i5 + %l5], %l5 and %l6, 0x3c, %l6 and %g4, 0x3c0, %g4 or %l6, %g3, %l6 srl %l0, 2, %l0 ld [%i5 + %l6], %l6 and %l7, 0x3c, %l7 srl %l2, 4, %l2 or %l7, %g4, %l7 srl %l4, 2, %l4 ld [%i5 + %l7], %l7 or %l0, %l1, %l1 srl %l5, 4, %l5 or %l1, %l2, %l2 srl %l6, 6, %l6 or %l4, %l5, %l5 srl %l3, 6, %l3 or %l6, %l7, %l7 or %l2, %l3, %i1 or %l5, %l7, %i0 ! ! result at this point is in i0-i1, just as it should for v8 ! #ifdef __sparcv9 srl %i1, 0, %i1 sllx %i0, 32, %i0 or %i0, %i1, %i0 #endif ret restore %g0,%g0,%g0 .type des_crypt_impl,2 .size des_crypt_impl,(.-des_crypt_impl) .align 32 ! ! CONSTANT POOL ! des_fp_table: .word 0 .word -2147483648 .word 8388608 .word -2139095040 .word 32768 .word -2147450880 .word 8421376 .word -2139062272 .word 128 .word -2147483520 .word 8388736 .word -2139094912 .word 32896 .word -2147450752 .word 8421504 .word -2139062144 .word 1073741824 .word -1073741824 .word 1082130432 .word -1065353216 .word 1073774592 .word -1073709056 .word 1082163200 .word -1065320448 .word 1073741952 .word -1073741696 .word 1082130560 .word -1065353088 .word 1073774720 .word -1073708928 .word 1082163328 .word -1065320320 .word 4194304 .word -2143289344 .word 12582912 .word -2134900736 .word 4227072 .word -2143256576 .word 12615680 .word -2134867968 .word 4194432 .word -2143289216 .word 12583040 .word -2134900608 .word 4227200 .word -2143256448 .word 12615808 .word -2134867840 .word 1077936128 .word -1069547520 .word 1086324736 .word -1061158912 .word 1077968896 .word -1069514752 .word 1086357504 .word -1061126144 .word 1077936256 .word -1069547392 .word 1086324864 .word -1061158784 .word 1077969024 .word -1069514624 .word 1086357632 .word -1061126016 .word 16384 .word -2147467264 .word 8404992 .word -2139078656 .word 49152 .word -2147434496 .word 8437760 .word -2139045888 .word 16512 .word -2147467136 .word 8405120 .word -2139078528 .word 49280 .word -2147434368 .word 8437888 .word -2139045760 .word 1073758208 .word -1073725440 .word 1082146816 .word -1065336832 .word 1073790976 .word -1073692672 .word 1082179584 .word -1065304064 .word 1073758336 .word -1073725312 .word 1082146944 .word -1065336704 .word 1073791104 .word -1073692544 .word 1082179712 .word -1065303936 .word 4210688 .word -2143272960 .word 12599296 .word -2134884352 .word 4243456 .word -2143240192 .word 12632064 .word -2134851584 .word 4210816 .word -2143272832 .word 12599424 .word -2134884224 .word 4243584 .word -2143240064 .word 12632192 .word -2134851456 .word 1077952512 .word -1069531136 .word 1086341120 .word -1061142528 .word 1077985280 .word -1069498368 .word 1086373888 .word -1061109760 .word 1077952640 .word -1069531008 .word 1086341248 .word -1061142400 .word 1077985408 .word -1069498240 .word 1086374016 .word -1061109632 .word 64 .word -2147483584 .word 8388672 .word -2139094976 .word 32832 .word -2147450816 .word 8421440 .word -2139062208 .word 192 .word -2147483456 .word 8388800 .word -2139094848 .word 32960 .word -2147450688 .word 8421568 .word -2139062080 .word 1073741888 .word -1073741760 .word 1082130496 .word -1065353152 .word 1073774656 .word -1073708992 .word 1082163264 .word -1065320384 .word 1073742016 .word -1073741632 .word 1082130624 .word -1065353024 .word 1073774784 .word -1073708864 .word 1082163392 .word -1065320256 .word 4194368 .word -2143289280 .word 12582976 .word -2134900672 .word 4227136 .word -2143256512 .word 12615744 .word -2134867904 .word 4194496 .word -2143289152 .word 12583104 .word -2134900544 .word 4227264 .word -2143256384 .word 12615872 .word -2134867776 .word 1077936192 .word -1069547456 .word 1086324800 .word -1061158848 .word 1077968960 .word -1069514688 .word 1086357568 .word -1061126080 .word 1077936320 .word -1069547328 .word 1086324928 .word -1061158720 .word 1077969088 .word -1069514560 .word 1086357696 .word -1061125952 .word 16448 .word -2147467200 .word 8405056 .word -2139078592 .word 49216 .word -2147434432 .word 8437824 .word -2139045824 .word 16576 .word -2147467072 .word 8405184 .word -2139078464 .word 49344 .word -2147434304 .word 8437952 .word -2139045696 .word 1073758272 .word -1073725376 .word 1082146880 .word -1065336768 .word 1073791040 .word -1073692608 .word 1082179648 .word -1065304000 .word 1073758400 .word -1073725248 .word 1082147008 .word -1065336640 .word 1073791168 .word -1073692480 .word 1082179776 .word -1065303872 .word 4210752 .word -2143272896 .word 12599360 .word -2134884288 .word 4243520 .word -2143240128 .word 12632128 .word -2134851520 .word 4210880 .word -2143272768 .word 12599488 .word -2134884160 .word 4243648 .word -2143240000 .word 12632256 .word -2134851392 .word 1077952576 .word -1069531072 .word 1086341184 .word -1061142464 .word 1077985344 .word -1069498304 .word 1086373952 .word -1061109696 .word 1077952704 .word -1069530944 .word 1086341312 .word -1061142336 .word 1077985472 .word -1069498176 .word 1086374080 .word -1061109568 .type des_fp_table,#object .size des_fp_table,1024 #endif /* lint || __lint */