/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2020 ARM Limited */
#include "mte_def.h"
.arch armv8.5 -a+memtag
#define ENTRY(name) \
.globl name ;\
.p2align 2 ;\
.type name, @function ;\
name:
#define ENDPROC(name) \
.size name, .-name ;
.text
/*
* mte_insert_random_tag : Insert random tag and might be same as the source tag if
* the source pointer has it .
* Input :
* x0 - source pointer with a tag / no - tag
* Return :
* x0 - pointer with random tag
*/
ENTRY(mte_insert_random_tag)
irg x0, x0, xzr
ret
ENDPROC(mte_insert_random_tag)
/*
* mte_insert_new_tag : Insert new tag and different from the source tag if
* source pointer has it .
* Input :
* x0 - source pointer with a tag / no - tag
* Return :
* x0 - pointer with random tag
*/
ENTRY(mte_insert_new_tag)
gmi x1, x0, xzr
irg x0, x0, x1
ret
ENDPROC(mte_insert_new_tag)
/*
* mte_get_tag_address : Get the tag from given address .
* Input :
* x0 - source pointer
* Return :
* x0 - pointer with appended tag
*/
ENTRY(mte_get_tag_address)
ldg x0, [x0]
ret
ENDPROC(mte_get_tag_address)
/*
* mte_set_tag_address_range : Set the tag range from the given address
* Input :
* x0 - source pointer with tag data
* x1 - range
* Return :
* none
*/
ENTRY(mte_set_tag_address_range)
cbz x1, 2 f
1 :
stg x0, [x0, #0 x0]
add x0, x0, #MT_GRANULE_SIZE
sub x1, x1, #MT_GRANULE_SIZE
cbnz x1, 1 b
2 :
ret
ENDPROC(mte_set_tag_address_range)
/*
* mt_clear_tag_address_range : Clear the tag range from the given address
* Input :
* x0 - source pointer with tag data
* x1 - range
* Return :
* none
*/
ENTRY(mte_clear_tag_address_range)
cbz x1, 2 f
1 :
stzg x0, [x0, #0 x0]
add x0, x0, #MT_GRANULE_SIZE
sub x1, x1, #MT_GRANULE_SIZE
cbnz x1, 1 b
2 :
ret
ENDPROC(mte_clear_tag_address_range)
/*
* mte_enable_pstate_tco : Enable PSTATE . TCO ( tag check override ) field
* Input :
* none
* Return :
* none
*/
ENTRY(mte_enable_pstate_tco)
msr tco, #MT_PSTATE_TCO_EN
ret
ENDPROC(mte_enable_pstate_tco)
/*
* mte_disable_pstate_tco : Disable PSTATE . TCO ( tag check override ) field
* Input :
* none
* Return :
* none
*/
ENTRY(mte_disable_pstate_tco)
msr tco, #MT_PSTATE_TCO_DIS
ret
ENDPROC(mte_disable_pstate_tco)
/*
* mte_get_pstate_tco : Get PSTATE . TCO ( tag check override ) field
* Input :
* none
* Return :
* x0
*/
ENTRY(mte_get_pstate_tco)
mrs x0, tco
ubfx x0, x0, #MT_PSTATE_TCO_SHIFT, #1
ret
ENDPROC(mte_get_pstate_tco)
Messung V0.5 in Prozent C=93 H=100 G=96
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-10-11)
¤
*© Formatika GbR, Deutschland