; Copyright (C) 2017 Free Software Foundation, Inc. ; Contributed by Sebastian Perta. ; ; This file is free software; you can redistribute it and/or modify it ; under the terms of the GNU General Public License as published by the ; Free Software Foundation; either version 3, or (at your option) any ; later version. ; ; This file is distributed in the hope that it will be useful, but ; WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ; General Public License for more details. ; ; Under Section 7 of GPL version 3, you are granted additional ; permissions described in the GCC Runtime Library Exception, version ; 3.1, as published by the Free Software Foundation. ; ; You should have received a copy of the GNU General Public License and ; a copy of the GCC Runtime Library Exception along with this program; ; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ; . #include "vregs.h" .text START_FUNC ___smaxdi3 ; copy first argument/operand to the output registers movw ax, [sp+4] movw r8, ax movw ax, [sp+6] movw r10, ax movw ax, [sp+8] movw r12, ax movw ax, [sp+10] movw r14, ax ; use 16-bit compares from the most significant words downto the least significant ones movw ax, [sp+18] cmpw ax, r14 xor1 CY, a.7 ; first compare accounts for the xor1 CY, r15.7 ; sign bits of the two operands bh $.L1 bnz $.L2 movw ax, [sp+16] cmpw ax, r12 bh $.L1 bnz $.L2 movw ax, [sp+14] cmpw ax, r10 bh $.L1 bnz $.L2 movw ax, [sp+12] cmpw ax, r8 bh $.L1 ret .L1: ; copy second argument/operand to the output registers movw ax, [sp+12] movw r8, ax movw ax, [sp+14] movw r10, ax movw ax, [sp+16] movw r12, ax movw ax, [sp+18] movw r14, ax .L2: ret END_FUNC ___smaxdi3