Lines Matching refs:pd

1049 void Assembler::facge(const PRegisterWithLaneSize& pd,
1062 Emit(FACGE_p_p_zz | SVESize(zn) | Pd(pd) | PgLow8(pg) | Rn(zn) | Rm(zm));
1065 void Assembler::facgt(const PRegisterWithLaneSize& pd,
1078 Emit(FACGT_p_p_zz | SVESize(zn) | Pd(pd) | PgLow8(pg) | Rn(zn) | Rm(zm));
1081 void Assembler::fcmeq(const PRegisterWithLaneSize& pd,
1094 Emit(FCMEQ_p_p_zz | SVESize(zn) | Pd(pd) | PgLow8(pg) | Rn(zn) | Rm(zm));
1097 void Assembler::fcmge(const PRegisterWithLaneSize& pd,
1110 Emit(FCMGE_p_p_zz | SVESize(zn) | Pd(pd) | PgLow8(pg) | Rn(zn) | Rm(zm));
1113 void Assembler::fcmgt(const PRegisterWithLaneSize& pd,
1126 Emit(FCMGT_p_p_zz | SVESize(zn) | Pd(pd) | PgLow8(pg) | Rn(zn) | Rm(zm));
1129 void Assembler::fcmne(const PRegisterWithLaneSize& pd,
1142 Emit(FCMNE_p_p_zz | SVESize(zn) | Pd(pd) | PgLow8(pg) | Rn(zn) | Rm(zm));
1145 void Assembler::fcmuo(const PRegisterWithLaneSize& pd,
1158 Emit(FCMUO_p_p_zz | SVESize(zn) | Pd(pd) | PgLow8(pg) | Rn(zn) | Rm(zm));
1163 void Assembler::fcmeq(const PRegisterWithLaneSize& pd,
1177 Emit(FCMEQ_p_p_z0 | SVESize(zn) | Pd(pd) | PgLow8(pg) | Rn(zn));
1180 void Assembler::fcmge(const PRegisterWithLaneSize& pd,
1194 Emit(FCMGE_p_p_z0 | SVESize(zn) | Pd(pd) | PgLow8(pg) | Rn(zn));
1197 void Assembler::fcmgt(const PRegisterWithLaneSize& pd,
1211 Emit(FCMGT_p_p_z0 | SVESize(zn) | Pd(pd) | PgLow8(pg) | Rn(zn));
1214 void Assembler::fcmle(const PRegisterWithLaneSize& pd,
1228 Emit(FCMLE_p_p_z0 | SVESize(zn) | Pd(pd) | PgLow8(pg) | Rn(zn));
1231 void Assembler::fcmlt(const PRegisterWithLaneSize& pd,
1245 Emit(FCMLT_p_p_z0 | SVESize(zn) | Pd(pd) | PgLow8(pg) | Rn(zn));
1248 void Assembler::fcmne(const PRegisterWithLaneSize& pd,
1262 Emit(FCMNE_p_p_z0 | SVESize(zn) | Pd(pd) | PgLow8(pg) | Rn(zn));
2684 void Assembler::whilele(const PRegisterWithLaneSize& pd,
2696 Emit(WHILELE_p_p_rr | SVESize(pd) | sf | Pd(pd) | Rn(rn) | Rm(rm));
2699 void Assembler::whilelo(const PRegisterWithLaneSize& pd,
2711 Emit(WHILELO_p_p_rr | SVESize(pd) | sf | Pd(pd) | Rn(rn) | Rm(rm));
2714 void Assembler::whilels(const PRegisterWithLaneSize& pd,
2726 Emit(WHILELS_p_p_rr | SVESize(pd) | sf | Pd(pd) | Rn(rn) | Rm(rm));
2729 void Assembler::whilelt(const PRegisterWithLaneSize& pd,
2741 Emit(WHILELT_p_p_rr | SVESize(pd) | sf | Pd(pd) | Rn(rn) | Rm(rm));
2744 void Assembler::CompareVectors(const PRegisterWithLaneSize& pd,
2749 Emit(op | SVESize(zn) | Pd(pd) | PgLow8(pg) | Rn(zn) | Rm(zm));
2752 void Assembler::CompareVectors(const PRegisterWithLaneSize& pd,
2757 Emit(op | SVESize(zn) | Pd(pd) | PgLow8(pg) | Rn(zn) | ImmField<20, 16>(imm));
2760 void Assembler::CompareVectors(const PRegisterWithLaneSize& pd,
2765 Emit(op | SVESize(zn) | Pd(pd) | PgLow8(pg) | Rn(zn) |
2770 const PRegisterWithLaneSize& pd,
2776 cmpeq(pd, pg, zn, zm);
2779 cmpge(pd, pg, zn, zm);
2782 cmpgt(pd, pg, zn, zm);
2785 cmple(pd, pg, zn, zm);
2788 cmplt(pd, pg, zn, zm);
2791 cmpne(pd, pg, zn, zm);
2794 cmphi(pd, pg, zn, zm);
2797 cmphs(pd, pg, zn, zm);
2800 cmplo(pd, pg, zn, zm);
2803 cmpls(pd, pg, zn, zm);
2812 void Assembler::cmpeq(const PRegisterWithLaneSize& pd,
2822 VIXL_ASSERT(AreSameLaneSize(pd, zn));
2824 CompareVectors(pd, pg, zn, imm5, CMPEQ_p_p_zi);
2827 void Assembler::cmpge(const PRegisterWithLaneSize& pd,
2837 VIXL_ASSERT(AreSameLaneSize(pd, zn));
2839 CompareVectors(pd, pg, zn, imm5, CMPGE_p_p_zi);
2842 void Assembler::cmpgt(const PRegisterWithLaneSize& pd,
2852 VIXL_ASSERT(AreSameLaneSize(pd, zn));
2854 CompareVectors(pd, pg, zn, imm5, CMPGT_p_p_zi);
2857 void Assembler::cmple(const PRegisterWithLaneSize& pd,
2867 VIXL_ASSERT(AreSameLaneSize(pd, zn));
2869 CompareVectors(pd, pg, zn, imm5, CMPLE_p_p_zi);
2872 void Assembler::cmplt(const PRegisterWithLaneSize& pd,
2882 VIXL_ASSERT(AreSameLaneSize(pd, zn));
2884 CompareVectors(pd, pg, zn, imm5, CMPLT_p_p_zi);
2887 void Assembler::cmpne(const PRegisterWithLaneSize& pd,
2897 VIXL_ASSERT(AreSameLaneSize(pd, zn));
2899 CompareVectors(pd, pg, zn, imm5, CMPNE_p_p_zi);
2904 void Assembler::cmphi(const PRegisterWithLaneSize& pd,
2914 VIXL_ASSERT(AreSameLaneSize(pd, zn));
2916 CompareVectors(pd, pg, zn, imm7, CMPHI_p_p_zi);
2919 void Assembler::cmphs(const PRegisterWithLaneSize& pd,
2929 VIXL_ASSERT(AreSameLaneSize(pd, zn));
2931 CompareVectors(pd, pg, zn, imm7, CMPHS_p_p_zi);
2934 void Assembler::cmplo(const PRegisterWithLaneSize& pd,
2944 VIXL_ASSERT(AreSameLaneSize(pd, zn));
2946 CompareVectors(pd, pg, zn, imm7, CMPLO_p_p_zi);
2949 void Assembler::cmpls(const PRegisterWithLaneSize& pd,
2959 VIXL_ASSERT(AreSameLaneSize(pd, zn));
2961 CompareVectors(pd, pg, zn, imm7, CMPLS_p_p_zi);
2969 void Assembler::cmpeq(const PRegisterWithLaneSize& pd,
2974 VIXL_ASSERT(AreSameLaneSize(pd, zn));
2980 CompareVectors(pd, pg, zn, zm, op);
2986 void Assembler::cmpge(const PRegisterWithLaneSize& pd,
2991 VIXL_ASSERT(AreSameLaneSize(pd, zn));
2997 CompareVectors(pd, pg, zn, zm, op);
3003 void Assembler::cmpgt(const PRegisterWithLaneSize& pd,
3008 VIXL_ASSERT(AreSameLaneSize(pd, zn));
3014 CompareVectors(pd, pg, zn, zm, op);
3020 void Assembler::cmphi(const PRegisterWithLaneSize& pd,
3025 VIXL_ASSERT(AreSameLaneSize(pd, zn));
3031 CompareVectors(pd, pg, zn, zm, op);
3037 void Assembler::cmphs(const PRegisterWithLaneSize& pd,
3042 VIXL_ASSERT(AreSameLaneSize(pd, zn));
3048 CompareVectors(pd, pg, zn, zm, op);
3051 void Assembler::cmple(const PRegisterWithLaneSize& pd,
3056 VIXL_ASSERT(AreSameLaneSize(pd, zn));
3058 cmpge(pd, pg, zm, zn);
3064 CompareVectors(pd, pg, zn, zm, CMPLE_p_p_zw);
3067 void Assembler::cmplo(const PRegisterWithLaneSize& pd,
3072 VIXL_ASSERT(AreSameLaneSize(pd, zn));
3074 cmphi(pd, pg, zm, zn);
3080 CompareVectors(pd, pg, zn, zm, CMPLO_p_p_zw);
3083 void Assembler::cmpls(const PRegisterWithLaneSize& pd,
3088 VIXL_ASSERT(AreSameLaneSize(pd, zn));
3090 cmphs(pd, pg, zm, zn);
3096 CompareVectors(pd, pg, zn, zm, CMPLS_p_p_zw);
3099 void Assembler::cmplt(const PRegisterWithLaneSize& pd,
3104 VIXL_ASSERT(AreSameLaneSize(pd, zn));
3106 cmpgt(pd, pg, zm, zn);
3112 CompareVectors(pd, pg, zn, zm, CMPLT_p_p_zw);
3118 void Assembler::cmpne(const PRegisterWithLaneSize& pd,
3123 VIXL_ASSERT(AreSameLaneSize(pd, zn));
3129 CompareVectors(pd, pg, zn, zm, op);
5379 void Assembler::brka(const PRegisterWithLaneSize& pd,
5384 VIXL_ASSERT(pd.IsLaneSizeB() && pn.IsLaneSizeB());
5387 Emit(BRKA_p_p_p | Pd(pd) | Pg<13, 10>(pg) | m | Pn(pn));
5390 void Assembler::brkas(const PRegisterWithLaneSize& pd,
5394 VIXL_ASSERT(pd.IsLaneSizeB() && pn.IsLaneSizeB());
5396 Emit(BRKAS_p_p_p_z | Pd(pd) | Pg<13, 10>(pg) | Pn(pn));
5399 void Assembler::brkb(const PRegisterWithLaneSize& pd,
5404 VIXL_ASSERT(pd.IsLaneSizeB() && pn.IsLaneSizeB());
5407 Emit(BRKB_p_p_p | Pd(pd) | Pg<13, 10>(pg) | m | Pn(pn));
5410 void Assembler::brkbs(const PRegisterWithLaneSize& pd,
5414 VIXL_ASSERT(pd.IsLaneSizeB() && pn.IsLaneSizeB());
5416 Emit(BRKBS_p_p_p_z | Pd(pd) | Pg<13, 10>(pg) | Pn(pn));
5419 void Assembler::brkn(const PRegisterWithLaneSize& pd,
5425 VIXL_ASSERT(pd.IsLaneSizeB() && pn.IsLaneSizeB());
5426 VIXL_ASSERT(pd.Is(pm));
5428 Emit(BRKN_p_p_pp | Pd(pd) | Pg<13, 10>(pg) | Pn(pn));
5431 void Assembler::brkns(const PRegisterWithLaneSize& pd,
5437 VIXL_ASSERT(pd.IsLaneSizeB() && pn.IsLaneSizeB());
5438 VIXL_ASSERT(pd.Is(pm));
5440 Emit(BRKNS_p_p_pp | Pd(pd) | Pg<13, 10>(pg) | Pn(pn));
5445 void Assembler::punpkhi(const PRegisterWithLaneSize& pd,
5452 VIXL_ASSERT(pd.IsLaneSizeH());
5455 Emit(PUNPKHI_p_p | Pd(pd) | Pn(pn));
5458 void Assembler::punpklo(const PRegisterWithLaneSize& pd,
5465 VIXL_ASSERT(pd.IsLaneSizeH());
5468 Emit(PUNPKLO_p_p | Pd(pd) | Pn(pn));
5471 void Assembler::rev(const PRegisterWithLaneSize& pd,
5478 VIXL_ASSERT(AreSameLaneSize(pd, pn));
5480 Emit(REV_p_p | SVESize(pd) | Pd(pd) | Rx<8, 5>(pn));
5483 void Assembler::trn1(const PRegisterWithLaneSize& pd,
5491 VIXL_ASSERT(AreSameLaneSize(pd, pn, pm));
5493 Emit(TRN1_p_pp | SVESize(pd) | Pd(pd) | Pn(pn) | Pm(pm));
5496 void Assembler::trn2(const PRegisterWithLaneSize& pd,
5504 VIXL_ASSERT(AreSameLaneSize(pd, pn, pm));
5506 Emit(TRN2_p_pp | SVESize(pd) | Pd(pd) | Pn(pn) | Pm(pm));
5509 void Assembler::uzp1(const PRegisterWithLaneSize& pd,
5517 VIXL_ASSERT(AreSameLaneSize(pd, pn, pm));
5519 Emit(UZP1_p_pp | SVESize(pd) | Pd(pd) | Pn(pn) | Pm(pm));
5522 void Assembler::uzp2(const PRegisterWithLaneSize& pd,
5530 VIXL_ASSERT(AreSameLaneSize(pd, pn, pm));
5532 Emit(UZP2_p_pp | SVESize(pd) | Pd(pd) | Pn(pn) | Pm(pm));
5535 void Assembler::zip1(const PRegisterWithLaneSize& pd,
5543 VIXL_ASSERT(AreSameLaneSize(pd, pn, pm));
5545 Emit(ZIP1_p_pp | SVESize(pd) | Pd(pd) | Pn(pn) | Pm(pm));
5548 void Assembler::zip2(const PRegisterWithLaneSize& pd,
5556 VIXL_ASSERT(AreSameLaneSize(pd, pn, pm));
5558 Emit(ZIP2_p_pp | SVESize(pd) | Pd(pd) | Pn(pn) | Pm(pm));
6101 void Assembler::and_(const PRegisterWithLaneSize& pd,
6106 VIXL_ASSERT(AreSameFormat(pd, pn, pm));
6107 VIXL_ASSERT(pd.IsLaneSizeB());
6108 Emit(AND_p_p_pp_z | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6111 void Assembler::ands(const PRegisterWithLaneSize& pd,
6116 VIXL_ASSERT(AreSameFormat(pd, pn, pm));
6117 VIXL_ASSERT(pd.IsLaneSizeB());
6118 Emit(ANDS_p_p_pp_z | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6121 void Assembler::bic(const PRegisterWithLaneSize& pd,
6126 VIXL_ASSERT(AreSameFormat(pd, pn, pm));
6127 VIXL_ASSERT(pd.IsLaneSizeB());
6128 Emit(BIC_p_p_pp_z | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6131 void Assembler::bics(const PRegisterWithLaneSize& pd,
6136 VIXL_ASSERT(AreSameFormat(pd, pn, pm));
6137 VIXL_ASSERT(pd.IsLaneSizeB());
6138 Emit(BICS_p_p_pp_z | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6141 void Assembler::eor(const PRegisterWithLaneSize& pd,
6146 VIXL_ASSERT(AreSameFormat(pd, pn, pm));
6147 VIXL_ASSERT(pd.IsLaneSizeB());
6148 Emit(EOR_p_p_pp_z | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6151 void Assembler::eors(const PRegisterWithLaneSize& pd,
6156 VIXL_ASSERT(AreSameFormat(pd, pn, pm));
6157 VIXL_ASSERT(pd.IsLaneSizeB());
6158 Emit(EORS_p_p_pp_z | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6161 void Assembler::nand(const PRegisterWithLaneSize& pd,
6166 VIXL_ASSERT(AreSameFormat(pd, pn, pm));
6167 VIXL_ASSERT(pd.IsLaneSizeB());
6168 Emit(NAND_p_p_pp_z | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6171 void Assembler::nands(const PRegisterWithLaneSize& pd,
6176 VIXL_ASSERT(AreSameFormat(pd, pn, pm));
6177 VIXL_ASSERT(pd.IsLaneSizeB());
6178 Emit(NANDS_p_p_pp_z | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6181 void Assembler::nor(const PRegisterWithLaneSize& pd,
6186 VIXL_ASSERT(AreSameFormat(pd, pn, pm));
6187 VIXL_ASSERT(pd.IsLaneSizeB());
6188 Emit(NOR_p_p_pp_z | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6191 void Assembler::nors(const PRegisterWithLaneSize& pd,
6196 VIXL_ASSERT(AreSameFormat(pd, pn, pm));
6197 VIXL_ASSERT(pd.IsLaneSizeB());
6198 Emit(NORS_p_p_pp_z | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6201 void Assembler::orn(const PRegisterWithLaneSize& pd,
6206 VIXL_ASSERT(AreSameFormat(pd, pn, pm));
6207 VIXL_ASSERT(pd.IsLaneSizeB());
6208 Emit(ORN_p_p_pp_z | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6211 void Assembler::orns(const PRegisterWithLaneSize& pd,
6216 VIXL_ASSERT(AreSameFormat(pd, pn, pm));
6217 VIXL_ASSERT(pd.IsLaneSizeB());
6218 Emit(ORNS_p_p_pp_z | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6221 void Assembler::orr(const PRegisterWithLaneSize& pd,
6226 VIXL_ASSERT(AreSameFormat(pd, pn, pm));
6227 VIXL_ASSERT(pd.IsLaneSizeB());
6228 Emit(ORR_p_p_pp_z | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6231 void Assembler::orrs(const PRegisterWithLaneSize& pd,
6236 VIXL_ASSERT(AreSameFormat(pd, pn, pm));
6237 VIXL_ASSERT(pd.IsLaneSizeB());
6238 Emit(ORRS_p_p_pp_z | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6241 void Assembler::sel(const PRegisterWithLaneSize& pd,
6246 Emit(SEL_p_p_pp | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6251 void Assembler::pfalse(const PRegisterWithLaneSize& pd) {
6259 Emit(PFALSE_p | Pd(pd));
6262 void Assembler::pfirst(const PRegisterWithLaneSize& pd,
6271 VIXL_ASSERT(pd.Is(pn));
6272 VIXL_ASSERT(pd.IsLaneSizeB());
6274 Emit(PFIRST_p_p_p | Pd(pd) | Pg<8, 5>(pg));
6277 void Assembler::pnext(const PRegisterWithLaneSize& pd,
6286 VIXL_ASSERT(pd.Is(pn));
6288 Emit(PNEXT_p_p_p | SVESize(pd) | Pd(pd) | Pg<8, 5>(pg));
6302 void Assembler::ptrue(const PRegisterWithLaneSize& pd, int pattern) {
6309 Emit(PTRUE_p_s | SVESize(pd) | Pd(pd) | ImmSVEPredicateConstraint(pattern));
6312 void Assembler::ptrues(const PRegisterWithLaneSize& pd, int pattern) {
6319 Emit(PTRUES_p_s | SVESize(pd) | Pd(pd) | ImmSVEPredicateConstraint(pattern));
6322 void Assembler::rdffr(const PRegisterWithLaneSize& pd) {
6329 Emit(RDFFR_p_f | Pd(pd));
6332 void Assembler::rdffr(const PRegisterWithLaneSize& pd, const PRegisterZ& pg) {
6339 Emit(RDFFR_p_p_f | Pd(pd) | Pg<8, 5>(pg));
6342 void Assembler::rdffrs(const PRegisterWithLaneSize& pd, const PRegisterZ& pg) {
6349 Emit(RDFFRS_p_p_f | Pd(pd) | Pg<8, 5>(pg));
6354 void Assembler::brkpa(const PRegisterWithLaneSize& pd,
6365 Emit(BRKPA_p_p_pp | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6368 void Assembler::brkpas(const PRegisterWithLaneSize& pd,
6379 Emit(BRKPAS_p_p_pp | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6382 void Assembler::brkpb(const PRegisterWithLaneSize& pd,
6393 Emit(BRKPB_p_p_pp | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6396 void Assembler::brkpbs(const PRegisterWithLaneSize& pd,
6407 Emit(BRKPBS_p_p_pp | Pd(pd) | Pg<13, 10>(pg) | Pn(pn) | Pm(pm));
6514 void Assembler::mov(const PRegister& pd, const PRegister& pn) {
6516 VIXL_ASSERT((!pd.HasLaneSize() && !pn.HasLaneSize()) ||
6517 AreSameLaneSize(pd, pn));
6518 orr(pd.VnB(), pn.Zeroing(), pn.VnB(), pn.VnB());
6521 void Assembler::mov(const PRegisterWithLaneSize& pd,
6525 sel(pd, pg, pn, pd);
6528 void Assembler::mov(const PRegisterWithLaneSize& pd,
6532 and_(pd, pg, pn, pn);
6593 void Assembler::movs(const PRegister& pd, const PRegister& pn) {
6595 orrs(pd.VnB(), pn.Zeroing(), pn.VnB(), pn.VnB());
6598 void Assembler::movs(const PRegisterWithLaneSize& pd,
6602 ands(pd, pg, pn, pn);
6605 void Assembler::not_(const PRegisterWithLaneSize& pd,
6609 eor(pd, pg, pn, pg.VnB());
6612 void Assembler::nots(const PRegisterWithLaneSize& pd,
6616 eors(pd, pg, pn, pg.VnB());
7270 void Assembler::match(const PRegisterWithLaneSize& pd,
7279 VIXL_ASSERT(AreSameLaneSize(pd, zn, zm));
7282 Emit(0x45208000 | SVESize(zm) | Pd(pd) | PgLow8(pg) | Rn(zn) | Rm(zm));
7378 void Assembler::nmatch(const PRegisterWithLaneSize& pd,
7387 VIXL_ASSERT(AreSameLaneSize(pd, zn, zm));
7390 Emit(0x45208010 | SVESize(zm) | Pd(pd) | PgLow8(pg) | Rn(zn) | Rm(zm));
9711 void Assembler::whilege(const PRegisterWithLaneSize& pd,
9723 Emit(0x25200000 | SVESize(pd) | sf | Pd(pd) | Rn(rn) | Rm(rm));
9726 void Assembler::whilegt(const PRegisterWithLaneSize& pd,
9738 Emit(0x25200010 | SVESize(pd) | sf | Pd(pd) | Rn(rn) | Rm(rm));
9741 void Assembler::whilehi(const PRegisterWithLaneSize& pd,
9753 Emit(0x25200810 | SVESize(pd) | sf | Pd(pd) | Rn(rn) | Rm(rm));
9756 void Assembler::whilehs(const PRegisterWithLaneSize& pd,
9768 Emit(0x25200800 | SVESize(pd) | sf | Pd(pd) | Rn(rn) | Rm(rm));
9771 void Assembler::whilerw(const PRegisterWithLaneSize& pd,
9781 Emit(0x25203010 | SVESize(pd) | Pd(pd) | Rn(rn) | Rm(rm));
9784 void Assembler::whilewr(const PRegisterWithLaneSize& pd,
9794 Emit(0x25203000 | SVESize(pd) | Pd(pd) | Rn(rn) | Rm(rm));