Blame crypto/armv4cpuid.pl

Packit Service 084de1
#! /usr/bin/env perl
Packit Service 084de1
# Copyright 2015-2020 The OpenSSL Project Authors. All Rights Reserved.
Packit Service 084de1
#
Packit Service 084de1
# Licensed under the OpenSSL license (the "License").  You may not use
Packit Service 084de1
# this file except in compliance with the License.  You can obtain a copy
Packit Service 084de1
# in the file LICENSE in the source distribution or at
Packit Service 084de1
# https://www.openssl.org/source/license.html
Packit Service 084de1
Packit Service 084de1
Packit Service 084de1
$flavour = shift;
Packit Service 084de1
$output  = shift;
Packit Service 084de1
Packit Service 084de1
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
Packit Service 084de1
( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
Packit Service 084de1
( $xlate="${dir}perlasm/arm-xlate.pl" and -f $xlate) or
Packit Service 084de1
die "can't locate arm-xlate.pl";
Packit Service 084de1
Packit Service 084de1
open OUT,"| \"$^X\" $xlate $flavour $output";
Packit Service 084de1
*STDOUT=*OUT;
Packit Service 084de1
Packit Service 084de1
$code.=<<___;
Packit Service 084de1
#include "arm_arch.h"
Packit Service 084de1
Packit Service 084de1
.text
Packit Service 084de1
#if defined(__thumb2__) && !defined(__APPLE__)
Packit Service 084de1
.syntax	unified
Packit Service 084de1
.thumb
Packit Service 084de1
#else
Packit Service 084de1
.code	32
Packit Service 084de1
#undef	__thumb2__
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
.align	5
Packit Service 084de1
.global	OPENSSL_atomic_add
Packit Service 084de1
.type	OPENSSL_atomic_add,%function
Packit Service 084de1
OPENSSL_atomic_add:
Packit Service 084de1
#if __ARM_ARCH__>=6
Packit Service 084de1
.Ladd:	ldrex	r2,[r0]
Packit Service 084de1
	add	r3,r2,r1
Packit Service 084de1
	strex	r2,r3,[r0]
Packit Service 084de1
	cmp	r2,#0
Packit Service 084de1
	bne	.Ladd
Packit Service 084de1
	mov	r0,r3
Packit Service 084de1
	bx	lr
Packit Service 084de1
#else
Packit Service 084de1
	stmdb	sp!,{r4-r6,lr}
Packit Service 084de1
	ldr	r2,.Lspinlock
Packit Service 084de1
	adr	r3,.Lspinlock
Packit Service 084de1
	mov	r4,r0
Packit Service 084de1
	mov	r5,r1
Packit Service 084de1
	add	r6,r3,r2	@ &spinlock
Packit Service 084de1
	b	.+8
Packit Service 084de1
.Lspin:	bl	sched_yield
Packit Service 084de1
	mov	r0,#-1
Packit Service 084de1
	swp	r0,r0,[r6]
Packit Service 084de1
	cmp	r0,#0
Packit Service 084de1
	bne	.Lspin
Packit Service 084de1
Packit Service 084de1
	ldr	r2,[r4]
Packit Service 084de1
	add	r2,r2,r5
Packit Service 084de1
	str	r2,[r4]
Packit Service 084de1
	str	r0,[r6]		@ release spinlock
Packit Service 084de1
	ldmia	sp!,{r4-r6,lr}
Packit Service 084de1
	tst	lr,#1
Packit Service 084de1
	moveq	pc,lr
Packit Service 084de1
	.word	0xe12fff1e	@ bx	lr
Packit Service 084de1
#endif
Packit Service 084de1
.size	OPENSSL_atomic_add,.-OPENSSL_atomic_add
Packit Service 084de1
Packit Service 084de1
.global	OPENSSL_cleanse
Packit Service 084de1
.type	OPENSSL_cleanse,%function
Packit Service 084de1
OPENSSL_cleanse:
Packit Service 084de1
	eor	ip,ip,ip
Packit Service 084de1
	cmp	r1,#7
Packit Service 084de1
#ifdef	__thumb2__
Packit Service 084de1
	itt	hs
Packit Service 084de1
#endif
Packit Service 084de1
	subhs	r1,r1,#4
Packit Service 084de1
	bhs	.Lot
Packit Service 084de1
	cmp	r1,#0
Packit Service 084de1
	beq	.Lcleanse_done
Packit Service 084de1
.Little:
Packit Service 084de1
	strb	ip,[r0],#1
Packit Service 084de1
	subs	r1,r1,#1
Packit Service 084de1
	bhi	.Little
Packit Service 084de1
	b	.Lcleanse_done
Packit Service 084de1
Packit Service 084de1
.Lot:	tst	r0,#3
Packit Service 084de1
	beq	.Laligned
Packit Service 084de1
	strb	ip,[r0],#1
Packit Service 084de1
	sub	r1,r1,#1
Packit Service 084de1
	b	.Lot
Packit Service 084de1
.Laligned:
Packit Service 084de1
	str	ip,[r0],#4
Packit Service 084de1
	subs	r1,r1,#4
Packit Service 084de1
	bhs	.Laligned
Packit Service 084de1
	adds	r1,r1,#4
Packit Service 084de1
	bne	.Little
Packit Service 084de1
.Lcleanse_done:
Packit Service 084de1
#if __ARM_ARCH__>=5
Packit Service 084de1
	bx	lr
Packit Service 084de1
#else
Packit Service 084de1
	tst	lr,#1
Packit Service 084de1
	moveq	pc,lr
Packit Service 084de1
	.word	0xe12fff1e	@ bx	lr
Packit Service 084de1
#endif
Packit Service 084de1
.size	OPENSSL_cleanse,.-OPENSSL_cleanse
Packit Service 084de1
Packit Service 084de1
.global	CRYPTO_memcmp
Packit Service 084de1
.type	CRYPTO_memcmp,%function
Packit Service 084de1
.align	4
Packit Service 084de1
CRYPTO_memcmp:
Packit Service 084de1
	eor	ip,ip,ip
Packit Service 084de1
	cmp	r2,#0
Packit Service 084de1
	beq	.Lno_data
Packit Service 084de1
	stmdb	sp!,{r4,r5}
Packit Service 084de1
Packit Service 084de1
.Loop_cmp:
Packit Service 084de1
	ldrb	r4,[r0],#1
Packit Service 084de1
	ldrb	r5,[r1],#1
Packit Service 084de1
	eor	r4,r4,r5
Packit Service 084de1
	orr	ip,ip,r4
Packit Service 084de1
	subs	r2,r2,#1
Packit Service 084de1
	bne	.Loop_cmp
Packit Service 084de1
Packit Service 084de1
	ldmia	sp!,{r4,r5}
Packit Service 084de1
.Lno_data:
Packit Service 084de1
	rsb	r0,ip,#0
Packit Service 084de1
	mov	r0,r0,lsr#31
Packit Service 084de1
#if __ARM_ARCH__>=5
Packit Service 084de1
	bx	lr
Packit Service 084de1
#else
Packit Service 084de1
	tst	lr,#1
Packit Service 084de1
	moveq	pc,lr
Packit Service 084de1
	.word	0xe12fff1e	@ bx	lr
Packit Service 084de1
#endif
Packit Service 084de1
.size	CRYPTO_memcmp,.-CRYPTO_memcmp
Packit Service 084de1
Packit Service 084de1
#if __ARM_MAX_ARCH__>=7
Packit Service 084de1
.arch	armv7-a
Packit Service 084de1
.fpu	neon
Packit Service 084de1
Packit Service 084de1
.align	5
Packit Service 084de1
.global	_armv7_neon_probe
Packit Service 084de1
.type	_armv7_neon_probe,%function
Packit Service 084de1
_armv7_neon_probe:
Packit Service 084de1
	vorr	q0,q0,q0
Packit Service 084de1
	bx	lr
Packit Service 084de1
.size	_armv7_neon_probe,.-_armv7_neon_probe
Packit Service 084de1
Packit Service 084de1
.global	_armv7_tick
Packit Service 084de1
.type	_armv7_tick,%function
Packit Service 084de1
_armv7_tick:
Packit Service 084de1
#ifdef	__APPLE__
Packit Service 084de1
	mrrc	p15,0,r0,r1,c14		@ CNTPCT
Packit Service 084de1
#else
Packit Service 084de1
	mrrc	p15,1,r0,r1,c14		@ CNTVCT
Packit Service 084de1
#endif
Packit Service 084de1
	bx	lr
Packit Service 084de1
.size	_armv7_tick,.-_armv7_tick
Packit Service 084de1
Packit Service 084de1
.global	_armv8_aes_probe
Packit Service 084de1
.type	_armv8_aes_probe,%function
Packit Service 084de1
_armv8_aes_probe:
Packit Service 084de1
#if defined(__thumb2__) && !defined(__APPLE__)
Packit Service 084de1
	.byte	0xb0,0xff,0x00,0x03	@ aese.8	q0,q0
Packit Service 084de1
#else
Packit Service 084de1
	.byte	0x00,0x03,0xb0,0xf3	@ aese.8	q0,q0
Packit Service 084de1
#endif
Packit Service 084de1
	bx	lr
Packit Service 084de1
.size	_armv8_aes_probe,.-_armv8_aes_probe
Packit Service 084de1
Packit Service 084de1
.global	_armv8_sha1_probe
Packit Service 084de1
.type	_armv8_sha1_probe,%function
Packit Service 084de1
_armv8_sha1_probe:
Packit Service 084de1
#if defined(__thumb2__) && !defined(__APPLE__)
Packit Service 084de1
	.byte	0x00,0xef,0x40,0x0c	@ sha1c.32	q0,q0,q0
Packit Service 084de1
#else
Packit Service 084de1
	.byte	0x40,0x0c,0x00,0xf2	@ sha1c.32	q0,q0,q0
Packit Service 084de1
#endif
Packit Service 084de1
	bx	lr
Packit Service 084de1
.size	_armv8_sha1_probe,.-_armv8_sha1_probe
Packit Service 084de1
Packit Service 084de1
.global	_armv8_sha256_probe
Packit Service 084de1
.type	_armv8_sha256_probe,%function
Packit Service 084de1
_armv8_sha256_probe:
Packit Service 084de1
#if defined(__thumb2__) && !defined(__APPLE__)
Packit Service 084de1
	.byte	0x00,0xff,0x40,0x0c	@ sha256h.32	q0,q0,q0
Packit Service 084de1
#else
Packit Service 084de1
	.byte	0x40,0x0c,0x00,0xf3	@ sha256h.32	q0,q0,q0
Packit Service 084de1
#endif
Packit Service 084de1
	bx	lr
Packit Service 084de1
.size	_armv8_sha256_probe,.-_armv8_sha256_probe
Packit Service 084de1
.global	_armv8_pmull_probe
Packit Service 084de1
.type	_armv8_pmull_probe,%function
Packit Service 084de1
_armv8_pmull_probe:
Packit Service 084de1
#if defined(__thumb2__) && !defined(__APPLE__)
Packit Service 084de1
	.byte	0xa0,0xef,0x00,0x0e	@ vmull.p64	q0,d0,d0
Packit Service 084de1
#else
Packit Service 084de1
	.byte	0x00,0x0e,0xa0,0xf2	@ vmull.p64	q0,d0,d0
Packit Service 084de1
#endif
Packit Service 084de1
	bx	lr
Packit Service 084de1
.size	_armv8_pmull_probe,.-_armv8_pmull_probe
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
.global	OPENSSL_wipe_cpu
Packit Service 084de1
.type	OPENSSL_wipe_cpu,%function
Packit Service 084de1
OPENSSL_wipe_cpu:
Packit Service 084de1
#if __ARM_MAX_ARCH__>=7
Packit Service 084de1
	ldr	r0,.LOPENSSL_armcap
Packit Service 084de1
	adr	r1,.LOPENSSL_armcap
Packit Service 084de1
	ldr	r0,[r1,r0]
Packit Service 084de1
#ifdef	__APPLE__
Packit Service 084de1
	ldr	r0,[r0]
Packit Service 084de1
#endif
Packit Service 084de1
#endif
Packit Service 084de1
	eor	r2,r2,r2
Packit Service 084de1
	eor	r3,r3,r3
Packit Service 084de1
	eor	ip,ip,ip
Packit Service 084de1
#if __ARM_MAX_ARCH__>=7
Packit Service 084de1
	tst	r0,#1
Packit Service 084de1
	beq	.Lwipe_done
Packit Service 084de1
	veor	q0, q0, q0
Packit Service 084de1
	veor	q1, q1, q1
Packit Service 084de1
	veor	q2, q2, q2
Packit Service 084de1
	veor	q3, q3, q3
Packit Service 084de1
	veor	q8, q8, q8
Packit Service 084de1
	veor	q9, q9, q9
Packit Service 084de1
	veor	q10, q10, q10
Packit Service 084de1
	veor	q11, q11, q11
Packit Service 084de1
	veor	q12, q12, q12
Packit Service 084de1
	veor	q13, q13, q13
Packit Service 084de1
	veor	q14, q14, q14
Packit Service 084de1
	veor	q15, q15, q15
Packit Service 084de1
.Lwipe_done:
Packit Service 084de1
#endif
Packit Service 084de1
	mov	r0,sp
Packit Service 084de1
#if __ARM_ARCH__>=5
Packit Service 084de1
	bx	lr
Packit Service 084de1
#else
Packit Service 084de1
	tst	lr,#1
Packit Service 084de1
	moveq	pc,lr
Packit Service 084de1
	.word	0xe12fff1e	@ bx	lr
Packit Service 084de1
#endif
Packit Service 084de1
.size	OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu
Packit Service 084de1
Packit Service 084de1
.global	OPENSSL_instrument_bus
Packit Service 084de1
.type	OPENSSL_instrument_bus,%function
Packit Service 084de1
OPENSSL_instrument_bus:
Packit Service 084de1
	eor	r0,r0,r0
Packit Service 084de1
#if __ARM_ARCH__>=5
Packit Service 084de1
	bx	lr
Packit Service 084de1
#else
Packit Service 084de1
	tst	lr,#1
Packit Service 084de1
	moveq	pc,lr
Packit Service 084de1
	.word	0xe12fff1e	@ bx	lr
Packit Service 084de1
#endif
Packit Service 084de1
.size	OPENSSL_instrument_bus,.-OPENSSL_instrument_bus
Packit Service 084de1
Packit Service 084de1
.global	OPENSSL_instrument_bus2
Packit Service 084de1
.type	OPENSSL_instrument_bus2,%function
Packit Service 084de1
OPENSSL_instrument_bus2:
Packit Service 084de1
	eor	r0,r0,r0
Packit Service 084de1
#if __ARM_ARCH__>=5
Packit Service 084de1
	bx	lr
Packit Service 084de1
#else
Packit Service 084de1
	tst	lr,#1
Packit Service 084de1
	moveq	pc,lr
Packit Service 084de1
	.word	0xe12fff1e	@ bx	lr
Packit Service 084de1
#endif
Packit Service 084de1
.size	OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2
Packit Service 084de1
Packit Service 084de1
.align	5
Packit Service 084de1
#if __ARM_MAX_ARCH__>=7
Packit Service 084de1
.LOPENSSL_armcap:
Packit Service 084de1
.word	OPENSSL_armcap_P-.
Packit Service 084de1
#endif
Packit Service 084de1
#if __ARM_ARCH__>=6
Packit Service 084de1
.align	5
Packit Service 084de1
#else
Packit Service 084de1
.Lspinlock:
Packit Service 084de1
.word	atomic_add_spinlock-.Lspinlock
Packit Service 084de1
.align	5
Packit Service 084de1
Packit Service 084de1
.data
Packit Service 084de1
.align	2
Packit Service 084de1
atomic_add_spinlock:
Packit Service 084de1
.word	0
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
.comm	OPENSSL_armcap_P,4,4
Packit Service 084de1
.hidden	OPENSSL_armcap_P
Packit Service 084de1
___
Packit Service 084de1
Packit Service 084de1
print $code;
Packit Service 084de1
close STDOUT or die "error closing STDOUT: $!";