// Test the regparm ABI with builtin and non-builtin calls
// Issue: https://github.com/rust-lang/rust/issues/145271
//@ add-minicore
//@ assembly-output: emit-asm
//@ compile-flags: -O --target=i686-unknown-linux-gnu -Crelocation-model=static
//@ revisions: REGPARM1 REGPARM2 REGPARM3
//@[REGPARM1] compile-flags: -Zregparm=1
//@[REGPARM2] compile-flags: -Zregparm=2
//@[REGPARM3] compile-flags: -Zregparm=3
//@ needs-llvm-components: x86
#![feature(no_core)]
#![no_std]
#![no_core]
#![crate_type = "lib"]

extern crate minicore;
use minicore::*;

unsafe extern "C" {
    fn memset(p: *mut c_void, val: i32, len: usize) -> *mut c_void;
    fn non_builtin_memset(p: *mut c_void, val: i32, len: usize) -> *mut c_void;
}

#[unsafe(no_mangle)]
pub unsafe extern "C" fn entrypoint(len: usize, ptr: *mut c_void, val: i32) -> *mut c_void {
    // REGPARM1-LABEL: entrypoint
    // REGPARM1: movl %e{{.*}}, %ecx
    // REGPARM1: pushl
    // REGPARM1: pushl
    // REGPARM1: calll memset

    // REGPARM2-LABEL: entrypoint
    // REGPARM2: movl 16(%esp), %edx
    // REGPARM2: movl %e{{.*}}, (%esp)
    // REGPARM2: movl %e{{.*}}, %eax
    // REGPARM2: calll memset

    // REGPARM3-LABEL: entrypoint
    // REGPARM3: movl %e{{.*}}, %esi
    // REGPARM3: movl %e{{.*}}, %eax
    // REGPARM3: movl %e{{.*}}, %ecx
    // REGPARM3: jmp memset
    unsafe { memset(ptr, val, len) }
}

#[unsafe(no_mangle)]
pub unsafe extern "C" fn non_builtin_entrypoint(
    len: usize,
    ptr: *mut c_void,
    val: i32,
) -> *mut c_void {
    // REGPARM1-LABEL: non_builtin_entrypoint
    // REGPARM1: movl %e{{.*}}, %ecx
    // REGPARM1: pushl
    // REGPARM1: pushl
    // REGPARM1: calll non_builtin_memset

    // REGPARM2-LABEL: non_builtin_entrypoint
    // REGPARM2: movl 16(%esp), %edx
    // REGPARM2: movl %e{{.*}}, (%esp)
    // REGPARM2: movl %e{{.*}}, %eax
    // REGPARM2: calll non_builtin_memset

    // REGPARM3-LABEL: non_builtin_entrypoint
    // REGPARM3: movl %e{{.*}}, %esi
    // REGPARM3: movl %e{{.*}}, %eax
    // REGPARM3: movl %e{{.*}}, %ecx
    // REGPARM3: jmp non_builtin_memset
    unsafe { non_builtin_memset(ptr, val, len) }
}
