1447 ( void ) native_pfm_index;
1450 SUBDBG(
"process_smpl_entry(%d,%d,%p,%p)\n", native_pfm_index, flags, ent,
1455 if ( is_montecito_and_dear( native_pfm_index ) ) {
1456 pfm_mont_pmd_reg_t data_addr;
1457 pfm_mont_pmd_reg_t latency;
1458 pfm_mont_pmd_reg_t load_addr;
1459 unsigned long newent;
1470 data_addr = *( pfm_mont_pmd_reg_t * ) * ent;
1472 *( pfm_mont_pmd_reg_t * ) ( (
unsigned long ) *ent +
1473 sizeof ( data_addr ) );
1475 *( pfm_mont_pmd_reg_t * ) ( (
unsigned long ) *ent +
1476 sizeof ( data_addr ) +
1477 sizeof ( latency ) );
1479 SUBDBG(
"PMD[32]: %#016llx\n",
1480 (
unsigned long long ) data_addr.pmd_val );
1481 SUBDBG(
"PMD[33]: %#016llx\n",
1482 (
unsigned long long ) latency.pmd_val );
1483 SUBDBG(
"PMD[36]: %#016llx\n",
1484 (
unsigned long long ) load_addr.pmd_val );
1486 if ( ( !load_addr.pmd36_mont_reg.dear_vl ) ||
1487 ( !load_addr.pmd33_mont_reg.dear_stat ) ) {
1489 (
"Invalid DEAR sample found, dear_vl = %d, dear_stat = %#x\n",
1490 load_addr.pmd36_mont_reg.dear_vl,
1491 load_addr.pmd33_mont_reg.dear_stat );
1493 newent = (
unsigned long ) *ent;
1494 newent += 3 *
sizeof ( pfm_mont_pmd_reg_t );
1495 *ent = ( pfm_dfl_smpl_entry_t * ) newent;
1500 *pc = (
caddr_t ) data_addr.pmd_val;
1503 ( ( load_addr.pmd36_mont_reg.dear_iaddr +
1504 (
unsigned long ) load_addr.pmd36_mont_reg.
1505 dear_bn ) << 4 ) | (
unsigned long ) load_addr.
1506 pmd36_mont_reg.dear_slot;
1513 newent = (
unsigned long ) *ent;
1514 newent += 3 *
sizeof ( pfm_mont_pmd_reg_t );
1515 *ent = ( pfm_dfl_smpl_entry_t * ) newent;
1517 }
else if ( is_montecito_and_iear( native_pfm_index ) ) {
1518 pfm_mont_pmd_reg_t latency;
1519 pfm_mont_pmd_reg_t icache_line_addr;
1520 unsigned long newent;
1530 icache_line_addr = *( pfm_mont_pmd_reg_t * ) * ent;
1532 *( pfm_mont_pmd_reg_t * ) ( (
unsigned long ) *ent +
1533 sizeof ( icache_line_addr ) );
1535 SUBDBG(
"PMD[34]: %#016llx\n",
1536 (
unsigned long long ) icache_line_addr.pmd_val );
1537 SUBDBG(
"PMD[35]: %#016llx\n",
1538 (
unsigned long long ) latency.pmd_val );
1540 if ( ( icache_line_addr.pmd34_mont_reg.iear_stat & 0x1 ) == 0 ) {
1541 SUBDBG(
"Invalid IEAR sample found, iear_stat = %#x\n",
1542 icache_line_addr.pmd34_mont_reg.iear_stat );
1544 newent = (
unsigned long ) *ent;
1545 newent += 2 *
sizeof ( pfm_mont_pmd_reg_t );
1546 *ent = ( pfm_dfl_smpl_entry_t * ) newent;
1551 unsigned long tmp = icache_line_addr.pmd34_mont_reg.iear_iaddr << 5;
1558 newent = (
unsigned long ) *ent;
1559 newent += 2 *
sizeof ( pfm_mont_pmd_reg_t );
1560 *ent = ( pfm_dfl_smpl_entry_t * ) newent;
1562 }
else if ( is_itanium2_and_dear( native_pfm_index ) ) {
1563 pfm_ita2_pmd_reg_t data_addr;
1564 pfm_ita2_pmd_reg_t latency;
1565 pfm_ita2_pmd_reg_t load_addr;
1566 unsigned long newent;
1577 data_addr = *( pfm_ita2_pmd_reg_t * ) * ent;
1579 *( pfm_ita2_pmd_reg_t * ) ( (
unsigned long ) *ent +
1580 sizeof ( data_addr ) );
1582 *( pfm_ita2_pmd_reg_t * ) ( (
unsigned long ) *ent +
1583 sizeof ( data_addr ) +
1584 sizeof ( latency ) );
1586 SUBDBG(
"PMD[2]: %#016llx\n",
1587 (
unsigned long long ) data_addr.pmd_val );
1588 SUBDBG(
"PMD[3]: %#016llx\n", (
unsigned long long ) latency.pmd_val );
1589 SUBDBG(
"PMD[17]: %#016llx\n",
1590 (
unsigned long long ) load_addr.pmd_val );
1592 if ( ( !load_addr.pmd17_ita2_reg.dear_vl ) ||
1593 ( !load_addr.pmd3_ita2_reg.dear_stat ) ) {
1595 (
"Invalid DEAR sample found, dear_vl = %d, dear_stat = %#x\n",
1596 load_addr.pmd17_ita2_reg.dear_vl,
1597 load_addr.pmd3_ita2_reg.dear_stat );
1599 newent = (
unsigned long ) *ent;
1600 newent += 3 *
sizeof ( pfm_mont_pmd_reg_t );
1601 *ent = ( pfm_dfl_smpl_entry_t * ) newent;
1606 *pc = (
caddr_t ) data_addr.pmd_val;
1609 ( ( load_addr.pmd17_ita2_reg.dear_iaddr +
1610 (
unsigned long ) load_addr.pmd17_ita2_reg.
1611 dear_bn ) << 4 ) | (
unsigned long ) load_addr.
1612 pmd17_ita2_reg.dear_slot;
1619 newent = (
unsigned long ) *ent;
1620 newent += 3 *
sizeof ( pfm_ita2_pmd_reg_t );
1621 *ent = ( pfm_dfl_smpl_entry_t * ) newent;
1623 }
else if ( is_itanium2_and_iear( native_pfm_index ) ) {
1624 pfm_ita2_pmd_reg_t latency;
1625 pfm_ita2_pmd_reg_t icache_line_addr;
1626 unsigned long newent;
1636 icache_line_addr = *( pfm_ita2_pmd_reg_t * ) * ent;
1638 *( pfm_ita2_pmd_reg_t * ) ( (
unsigned long ) *ent +
1639 sizeof ( icache_line_addr ) );
1641 SUBDBG(
"PMD[0]: %#016llx\n",
1642 (
unsigned long long ) icache_line_addr.pmd_val );
1643 SUBDBG(
"PMD[1]: %#016llx\n", (
unsigned long long ) latency.pmd_val );
1645 if ( ( icache_line_addr.pmd0_ita2_reg.iear_stat & 0x1 ) == 0 ) {
1646 SUBDBG(
"Invalid IEAR sample found, iear_stat = %#x\n",
1647 icache_line_addr.pmd0_ita2_reg.iear_stat );
1649 newent = (
unsigned long ) *ent;
1650 newent += 2 *
sizeof ( pfm_mont_pmd_reg_t );
1651 *ent = ( pfm_dfl_smpl_entry_t * ) newent;
1656 unsigned long tmp = icache_line_addr.pmd0_ita2_reg.iear_iaddr << 5;
1663 newent = (
unsigned long ) *ent;
1664 newent += 2 *
sizeof ( pfm_ita2_pmd_reg_t );
1665 *ent = ( pfm_dfl_smpl_entry_t * ) newent;
1669 ( is_btb( native_pfm_index ) ) {
1678 *pc = (
caddr_t ) ( (
size_t ) ( ( *ent )->ip ) );
#define PAPI_PROFIL_DATA_EAR
#define SUBDBG(format, args...)
#define PAPI_PROFIL_INST_EAR
void PAPIERROR(char *format,...)